nginx安全加固需编译阶段启用ssl、http_v2、realip、stub_status、secure_link模块,并在配置中关闭server_tokens、禁止敏感路径访问、限制请求大小与超时、配置限流及安全响应头。

源码编译的 Nginx 默认配置较开放,安全加固需在编译阶段和运行时配置两个层面同步落实。关键不是“加功能”,而是“关风险”——删减暴露面、限制非法访问、启用加密与校验机制。
编译阶段启用必要安全模块
configure 时必须显式开启以下模块,否则后续无法实现对应防护:
- --with-http_ssl_module:支撑 HTTPS 和 TLS 配置,禁用明文传输
- --with-http_v2_module:启用 HTTP/2,提升传输安全性(如强制加密协商)
- --with-http_realip_module:配合 CDN 或反向代理时,准确获取真实客户端 IP,避免伪造 X-Forwarded-For
- --with-http_stub_status_module:用于监控连接状态,辅助识别异常请求模式(如慢速攻击)
- --with-http_secure_link_module:生成有时效/签名的下载链接,防止资源被暴力遍历或盗链
主配置文件中关闭信息泄露
在 /usr/local/nginx/conf/nginx.conf 的 http 块顶部添加:
server_tokens off;
该指令禁止响应头中返回 Server: nginx/1.28.0 这类版本标识,降低攻击者针对性利用已知漏洞的风险。无需重启,执行 nginx -t && nginx -s reload 即可生效。
阻止敏感路径被外部访问
在 server 或 location 块中加入以下规则,防止泄露配置、源码或调试信息:
location ~ /\.(git|htaccess|env|log|ini|bak|swp)$ {
deny all;
}
location ^~ /.well-known/acme-challenge/ { allow all; }(若使用 Let’s Encrypt,此行需保留白名单)
注意:正则匹配优先级高于前缀匹配,^~ 确保 ACME 路径不被上面的 \. 规则误拦截。
限制请求行为与资源消耗
在 http 或 server 块中设置基础防护参数:
- client_max_body_size 10m;:防止超大上传耗尽内存
- client_header_timeout 10; 和 client_body_timeout 10;:缩短请求头/体读取等待时间,缓解慢速攻击(如 Slowloris)
- limit_req_zone $binary_remote_addr zone=antiflood:10m rate=10r/s; 后,在 location 中使用 limit_req burst=20 nodelay; 控制单 IP 请求频率
- add_header X-Content-Type-Options nosniff; 和 X-Frame-Options DENY;:防御 MIME 类型混淆与点击劫持











