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 可以有效地控制对服务器资源的访问,提高服务器的安全性和性能。