nginx虽非防火墙,但可作为应用层主动防御入口。通过隐藏服务器指纹、限制请求行为、强化传输安全及最小权限运行等配置,有效拦截自动化攻击、抵御资源耗尽、提升https安全并降低被攻破危害。

Nginx 本身不是防火墙,但它作为流量入口,天然具备在应用层实施主动防御的能力。合理配置后,它能拦截大量自动化攻击、限制恶意行为、隐藏攻击线索,把风险挡在业务逻辑之前。
隐藏服务器指纹,减少信息暴露
攻击者常通过响应头识别技术栈和版本,再针对性利用已知漏洞。最基础也最关键的一步是抹去可被扫描到的“身份标签”:
- 在
http块中添加server_tokens off;,关闭 Nginx 版本号输出 - 使用
more_clear_headers "Server"(需ngx_headers_more模块)移除Server头 - 显式禁止目录浏览:
autoindex off; - 阻止访问隐藏文件:
location ~ /\. { deny all; }
限制请求行为,抵御资源耗尽类攻击
不加约束的请求可能压垮服务,尤其面对慢速攻击或高频扫描时:
- 控制单 IP 请求频率:
limit_req_zone $binary_remote_addr zone=req_per_ip:10m rate=5r/s; limit_req zone=req_per_ip burst=10 nodelay;
- 限制并发连接数:
limit_conn_zone $binary_remote_addr zone=conn_per_ip:10m; limit_conn conn_per_ip 50;
- 设定上传大小上限:
client_max_body_size 10m;,避免大文件拖垮内存
强化传输安全与客户端防护
很多攻击依赖明文通信或浏览器信任机制缺陷,Nginx 可直接注入防护头:
- 强制 HTTPS 跳转:
return 301 https://$server_name$request_uri;(配合 443 端口 SSL 配置) - 启用 HSTS:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; - 防点击劫持:
add_header X-Frame-Options "DENY" always; - 防 MIME 嗅探:
add_header X-Content-Type-Options "nosniff" always; - 设置内容安全策略(CSP):
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline';" always;(按实际脚本来源调整)
最小权限运行,降低被攻破后的危害
即使配置再严,进程权限过大仍是巨大隐患:
- 创建专用低权用户:
useradd -r -s /sbin/nologin nginx - 在
nginx.conf中指定:user nginx nginx; - 确保静态资源目录挂载时启用
noexec,nodev,nosuid选项,防止脚本执行或提权
不复杂但容易忽略











