Nginx 日志中的訪問控制策略主要包括以下幾種:
allow 和 deny 指令:允許或拒絕特定的 IP 地址或 IP 段訪問資源。這些指令可以設置在 server
、location
和 http
配置區段中。例如:
location /secure/ {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
deny all;
}
在這個配置中,只有 IP 地址為 192.168.1.1 或者 IP 段為 192.168.1.0/24 和 10.1.1.0/16 的客戶端才能訪問 /secure
路徑,其他所有 IP 地址將被拒絕訪問。
geo 模塊:對于更復雜的 IP 控制,可以使用 geo
模塊。例如:
geo $allowed_ip {
default 0;
192.168.1.0/24 1;
10.0.0.0/8 1;
}
server {
location /admin/ {
if ($allowed_ip = 0) {
return 403;
}
# 其他配置。
}
}
這個配置表示,只有來自 192.168.1.0/24 和 10.0.0.0/8 網段的請求才能訪問 /admin
路徑。
auth_basic 模塊:提供基本的 HTTP 認證功能。例如:
location /private/ {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
這個配置要求客戶端在訪問 /private
路徑時輸入正確的用戶名和密碼。
limit_except 指令:限制特定的 HTTP 方法。例如,只允許 GET 和 POST 請求訪問某個路徑:
location /api/ {
limit_except GET POST {
deny all;
}
# 其他配置。
}
在這個配置中,除了 GET 和 POST 方法外,其他所有方法的請求都會被拒絕。
limit_req 模塊:限制客戶端在一定時間內的請求速率。例如,限制每秒 1 個請求:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location /search/ {
limit_req zone=one burst=5;
# 其他配置。
}
}
這個配置限制了來自每個客戶端的請求速率,超過限制的請求將被拒絕。
access_log 指令:用于記錄客戶端請求的訪問日志,包含請求時間、客戶端 IP、響應狀態等關鍵信息??梢酝ㄟ^ path
參數指定日志文件存儲路徑,通過 format
參數指定日志格式。例如:
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
}
這個配置會將所有的 HTTP 請求記錄到 /var/log/nginx/access.log
文件中。
日志輪轉:使用 logrotate
管理 Nginx 日志輪轉,以防止日志文件過大。例如:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
這個配置會每天輪轉一次日志文件,并保留最近的 14 個備份。
通過以上策略,Nginx 可以有效地控制對服務器資源的訪問,提高服務器的安全性和性能。