Nginx的访问控制列表(ACL)是保护Web应用安全的重要机制。以下是全面的安全设置建议:
# 允许特定IP访问
location /admin {
allow 192.168.1.100;
allow 10.0.0.0/24;
deny all;
}
# 拒绝特定IP
location / {
deny 123.45.67.89;
allow all;
}
# 限制User-Agent
if ($http_user_agent ~* (wget|curl|nikto|sqlmap)) {
return 403;
}
# 限制Referer
valid_referers none blocked server_names *.example.com;
if ($invalid_referer) {
return 403;
}
# 只允许GET和POST方法
location /api {
limit_except GET POST {
deny all;
}
}
# 限制请求速率
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
location / {
limit_req zone=one burst=20;
}
# 限制单个IP的连接数
limit_conn_zone $binary_remote_addr zone=addr:10m;
location /download {
limit_conn addr 5;
}
# 使用GeoIP模块
geo $blocked_country {
default 0;
RU 1; # 阻止俄罗斯IP
CN 1; # 阻止中国IP
}
server {
if ($blocked_country) {
return 403;
}
}
# 禁止访问特定文件类型
location ~* \.(php|sh|pl|py|asp)$ {
deny all;
}
# 禁止访问隐藏目录
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
# 结合map模块实现复杂ACL
map $remote_addr $acl {
default "deny";
192.168.1.100 "allow";
10.0.0.0/24 "allow";
}
server {
if ($acl = "deny") {
return 403;
}
}
通过合理配置这些ACL规则,可以显著提高Nginx服务器的安全性,防止未授权访问和各种网络攻击。