Nginx提供了多种访问控制机制,可以通过日志分析来优化这些策略。以下是关于Nginx访问控制策略的详细指南:
location /admin/ {
deny 192.168.1.100; # 拒绝特定IP
allow 192.168.1.0/24; # 允许整个子网
deny all; # 拒绝其他所有
}
检查$remote_addr
字段识别频繁访问的IP:
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -20
location /secure/ {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location /api/ {
limit_req zone=one burst=20;
}
}
# 查找高频率请求IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr
使用GeoIP模块:
geo $blocked_country {
default 0;
CN 1;
RU 1;
}
server {
if ($blocked_country) {
return 403;
}
}
map $http_user_agent $bad_agent {
default 0;
~*(wget|curl|nikto) 1;
}
server {
if ($bad_agent) {
return 403;
}
}
# 统计HTTP状态码
awk '{print $9}' access.log | sort | uniq -c | sort -rn
# 查找404请求
awk '($9 ~ /404/)' access.log | awk '{print $7}' | sort | uniq -c | sort -rn
# 查找耗时长的请求
awk '($NF > 1){print $1, $7, $NF}' access.log | sort -k3 -rn | head -20
goaccess access.log -a -o report.html
结合fail2ban:
# /etc/fail2ban/jail.d/nginx.conf
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log
通过合理配置这些访问控制策略,可以有效保护您的Nginx服务器免受恶意访问和滥用。