# 允许特定IP
allow 192.168.1.1;
allow 10.0.0.0/24;
# 拒绝其他所有
deny all;
# 可以用于location、server或http块
location /admin/ {
limit_except GET POST {
deny all;
}
}
# 定义限制区域
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
# 应用限制
location /api/ {
limit_req zone=one burst=20 nodelay;
}
# 定义限制区域
limit_conn_zone $binary_remote_addr zone=addr:10m;
# 应用限制
location /download/ {
limit_conn addr 5;
}
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
add_header Content-Security-Policy "default-src 'self'";
add_header Referrer-Policy "no-referrer-when-downgrade";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
ssl_ecdh_curve secp384r1;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
location ~* "(\'|\")(.*)(drop|insert|md5|select|union)" {
deny all;
}
location ~* (\.\./|\.\.\\) {
deny all;
}
server_tokens off;
# 禁止访问特定文件类型
location ~* \.(htaccess|htpasswd|ini|log|sh|bak)$ {
deny all;
}
# 禁止访问隐藏文件
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
if ($http_user_agent ~* (wget|curl|httrack|nikto|sqlmap) ) {
return 403;
}
add_header X-Frame-Options "SAMEORIGIN";
# 或完全禁止嵌入
add_header X-Frame-Options "DENY";
proxy_cookie_path / "/; HTTPOnly; Secure";
# 记录安全相关日志
log_format security '$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/security.log security;
# 使用geo模块创建黑名单
geo $blacklist {
default 0;
1.2.3.4 1; # 黑名单IP
5.6.7.8/24 1; # 黑名单网段
}
server {
if ($blacklist) {
return 403;
}
...
}
以上设置可根据实际业务需求进行调整,建议在测试环境验证后再应用到生产环境。