nginx 安全配置
Nginx 安全加固:隐藏版本号、限制请求、防止常见攻击
语法
各种安全相关指令
参数
| 参数 | 说明 | 示例 | 级别 |
|---|---|---|---|
server_tokens off |
隐藏 Nginx 版本号 | server_tokens off; |
常用 |
add_header X-Frame-Options |
防止点击劫持 | add_header X-Frame-Options SAMEORIGIN; |
常用 |
add_header X-Content-Type-Options |
防止 MIME 嗅探 | add_header X-Content-Type-Options nosniff; |
常用 |
limit_req_zone |
请求速率限制 | limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s; |
常用 |
client_max_body_size |
限制请求体大小 | client_max_body_size 10m; |
常用 |
示例
安全头配置
server {
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy strict-origin-when-cross-origin;
server_tokens off;
}基本安全头,防止常见攻击
API 限流
http {
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
}
server {
location /api/ {
limit_req zone=api burst=20 nodelay;
}
}每个 IP 每秒最多 10 个请求,突发允许 20 个
禁止访问敏感文件
location ~ /\.(git|env|htaccess) {
deny all;
return 404;
}
location ~ \.(sql|bak|log)$ {
deny all;
}阻止访问版本控制、环境变量和备份文件
IP 白名单
location /admin/ {
allow 192.168.1.0/24;
allow 10.0.0.1;
deny all;
}只允许内网访问管理后台
常见错误
limit_req 导致正常请求被拒绝
增加 burst 值或调高 rate,用 nodelay 避免排队延迟
技巧
- 生产环境必须隐藏版本号(server_tokens off)
- 安全头应该在 http 块全局设置
- limit_req 的 burst 参数允许短时间突发流量