3 Nginx 常用功能
3.1 Nginx 四層訪問控制
Nginx 中的訪問控制功能基于 ngx_http_access_module 模塊實現(xiàn),可以通過匹配客戶端源 IP 地址進行限制
該模塊是默認模塊,在使用 apt/yum 安裝的環(huán)境中默認存在,如果想要禁用,需要自行編譯,然后顯式聲明禁用該模塊
https://nginx.org/en/docs/http/ngx_http_access_module.html
deny address|CIDR|unix:|all; #拒絕訪問的客戶端,黑名單,可以是具體IP,網(wǎng)段,socket(1.5.1版本以上),所有
allow address|CIDR|unix:|all; #允許訪問的客戶端,白名單,可以是具體IP,網(wǎng)段,socket(1.5.1版本以上),所有
limit_except
server {
listen 80;
server_name www.m99-josedu.com;
root /var/www/html/www.m99-josedu.com;
location = /a.html {
allow 127.0.0.1;
}
}
server {
listen 80;
server_name www.m99-josedu.com;
root /var/www/html/www.m99-josedu.com;
location = /a.html {
deny all;
allow 127.0.0.1;
}
}
server {
listen 80;
server_name www.m99-josedu.com;
root /var/www/html/www.m99-josedu.com;
location = /a.html {
allow 127.0.0.1;
deny 10.0.0.208;
allow 10.0.0.0/24;
deny all;
}
}
3.2 Nginx 賬戶認證
Nginx 中的賬戶認證功能由 ngx_http_auth_basic_module 模塊提供,該模塊也是默認模塊
此種認證方式并不安全,如果服務(wù)端是 http 協(xié)議,而非 https 協(xié)議,則用戶名和密碼在網(wǎng)絡(luò)中是明文傳輸?shù)?,可以被抓包工具截獲
https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html
auth_basic string|off;
auth_basic_user_file file;
[root@ubuntu ~]
[root@rocky ~]
[root@ubuntu ~]
New password:
Re-type new password:
Adding password for user tom
[root@ubuntu ~]
Adding password for user jerry
[root@ubuntu ~]
tom:$apr1$.uhWB88p$NKvgCPmVyzJF6rRV9tpke1
jerry:$apr1$8.1IC.TR$GxmCHPQjTHdXbltchvi1i/
server {
listen 80;
server_name www.m99-josedu.com;
root /var/www/html/www.m99-josedu.com;
location = /a.html {
auth_basic "pls input your name"; #訪問 www.m99-josedu.com/a.html 時需要驗證
auth_basic_user_file conf.d/httpuser;
}
}
[root@ubuntu ~]
a.html
[root@ubuntu ~]
a.html
3.3 自定義錯誤頁面
在沒有配置錯誤處理頁面的情況下,非 200 狀態(tài)碼的響應(yīng)請求返回的都是 Nginx 默認頁面,我們可以通過指令設(shè)置自定義的錯誤頁面,不同的虛擬主機,不同的錯誤都可以設(shè)置成不同的錯誤頁面
https://nginx.org/en/docs/http/ngx_http_core_module.html
error_page code ... [=[response]] uri;
server {
listen 80;
server_name www.m99-josedu.com;
root /var/www/html/www.m99-josedu.com;
error_page 400 404 502 503 504 error.html;
location = /error.html {
root /data/errors;
}
}
[root@ubuntu ~]
error.html
server {
listen 80;
server_name www.m99-josedu.com;
root /var/www/html/www.m99-josedu.com;
error_page 400 404 =302 /index.html;
}
server {
listen 80;
server_name www.m99-josedu.com;
root /var/www/html/www.m99-josedu.com;
error_page 400 404 =302 http://www.baidu.com;
error_page 402 503 =301 http://www.baidu.com;
}
3.4 自定義錯誤日志
默認沒有為每個 server 配置單獨日志的情況下,所有錯誤日志和訪問日志都是寫在相同的文件中,我們可以單獨為每個 server 或 location 設(shè)置日志
https://nginx.org/en/docs/ngx_core_module.html
#全局配置
[root@ubuntu ~]# cat /etc/nginx/nginx.conf | grep log
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
error_log file [level]; #指定保存錯誤日志的文件和記錄級別,錯誤級別可參考syslog那一課的內(nèi)容
#如果不需要記錄日志,值可以寫在 /dev/null
#默認值 error_log logs/error.log error
#作用域 main, http, mail, stream, server, location
server {
listen 80;
server_name www.m99-josedu.com;
root /var/www/html/www.m99-josedu.com;
error_log /var/log/nginx/www.m99-josedu.com.error.log;
location = /abc {
error_log /dev/null;
}
}
try_files file ... uri;
try_files file ... =code;
[root@ubuntu ~]
try_files $uri $uri/ =404;
server {
listen 80;
server_name www.m99-josedu.com;
root /var/www/html/www.m99-josedu.com;
try_files $uri $uri.html $uri/index.html /index.html;
location /a{
try_files $uri $uri.html;
}
location /b{
try_files $uri $uri.html =418;
}
error_log /var/log/nginx/www.m99-josedu.com.error.log;
}
— END —
閱讀原文:原文鏈接
該文章在 2025/7/1 23:03:35 編輯過