nginx保护核心应用的本质是构建可控、可观察、可拦截的“智能门禁”。需隐藏版本号(server_tokens off)、限制http方法、控制请求频率与并发连接、隔离敏感路径、强制https并启用现代tls与hsts。

用 Nginx 保护核心应用,本质是把它当作一道可控、可观察、可拦截的“智能门禁”,而不是简单转发请求的管道。关键不在于堵死所有流量,而在于识别谁该进、谁该限、谁该拦,并把异常行为挡在应用之前。
隐藏身份,缩小攻击面
攻击者往往从暴露的信息入手。Nginx 默认会在响应头(Server: nginx/1.20.1)和错误页面中泄露版本号,这等于给黑客递上一份已知漏洞清单。
- 在 http 块中添加 server_tokens off;,彻底隐藏版本标识
- 若后端为 PHP,还需在 FastCGI 配置中加入 fastcgi_param SERVER_SOFTWARE nginx;,避免 PHP 自行输出 Apache 或其他服务器信息
- 禁用不必要的 HTTP 方法(如 PUT、DELETE、TRACE),在 location 块中用 limit_except GET HEAD POST { deny all; }
限制行为,防资源耗尽
很多干扰不是恶意攻击,而是低质量爬虫、配置错误的监控探针或突发流量。它们不触发漏洞,却可能拖垮你的应用进程。
- 用 limit_req 控制单 IP 请求频率,例如每秒最多 10 次,突发允许 20 次:
limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
在 server 或 location 中启用:limit_req zone=perip burst=20 nodelay; - 用 limit_conn 限制并发连接数,防止 Slowloris 类慢速攻击
- 设置合理超时:client_header_timeout 15;、client_body_timeout 15;、send_timeout 25;,及时释放僵死连接
隔离路径,阻断非法访问
核心应用通常只暴露少数接口路径,其余目录(如 .git、.env、backup、logs)一旦被遍历,就可能直接导致数据泄露或服务中断。
- 在 server 块中用 location 匹配敏感路径并拒绝:
location ~ /\.(git|htaccess|env|log|bak|swp)$ { deny all; } - 禁止路径遍历:
location ~ ../ { return 403; } - 静态资源目录(如 /static/)应明确限定只允许 GET/HEAD,且禁止执行脚本:
location /static/ { autoindex off; deny all; }(再配合内部 allow 规则)
强化通道,杜绝中间人干扰
未加密的 HTTP 流量容易被篡改或劫持,攻击者可能注入恶意 JS、替换响应内容,甚至伪造重定向——这些干扰对核心应用逻辑构成隐形威胁。
- 强制 HTTPS:在 HTTP server 中用 return 301 https://$host$request_uri;
- HTTPS server 中启用现代 TLS 配置:
使用 TLSv1.2+,禁用 SSLv3/TLSv1.0;
选用安全加密套件,如 ECDHE-ECDSA-AES128-GCM-SHA256;
开启 HSTS:add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; - 验证证书有效性,避免使用自签名或过期证书,否则客户端可能降级或报错中断











