本质是做“减法”,围绕最小权限、信息最小化、行为可预测三大原则,关闭版本标识、清除冗余响应头、禁用未用高风险模块、收紧错误响应、移除危险全局配置。

清理冗余和不安全的 Nginx 配置选项,本质是做“减法”:去掉暴露信息、放宽权限、放大攻击面的默认或历史遗留设置。这不是简单删几行,而是围绕最小权限、信息最小化、行为可预测三个原则系统梳理。
关闭版本标识与冗余响应头
Nginx 默认在 Server 响应头中返回完整版本号(如 nginx/1.18.0),错误页也带版本字样,这属于典型的信息泄露。
- 在
http或server块中添加:server_tokens off; - 若已安装
headers-more-nginx-module,可在同位置追加:more_clear_headers "Server" "X-Powered-By"; - 注意:
server_tokens off不影响功能,但会同时隐藏错误页面中的版本文字
禁用高风险或未使用的模块功能
很多模块默认启用却从未被业务调用,反而扩大了潜在攻击面(如 Perl、Lua、autoindex、ssi)。
- 检查当前启用模块:
nginx -V 2>&1 | grep -o with-http_.*_module - 对确认不用的功能,在配置中显式关闭:
location /icons/ { deny all; }(禁用 autoindex 的图标路径)ssi off;(关闭服务端包含) - 长期来看,重装时选用轻量包更彻底:如 Ubuntu 下用
nginx-light替代nginx-full,依赖更少,攻击面更小
收紧错误响应与调试行为
详细错误信息(尤其是后端错误)一旦透出,可能泄露路径、框架、数据库结构等敏感线索。
- 禁用 FastCGI 错误透传:
fastcgi_intercept_errors on;(配合自定义error_page) - 统一错误页,避免默认 Nginx 页面:
error_page 404 /404.html; error_page 500 502 503 504 /50x.html; - 确保日志级别不过高:
error_log /var/log/nginx/error.log warn;(避免info或debug级别上线)
移除危险的全局配置残留
一些老旧配置或测试遗留项,看似无害,实则破坏安全基线。
- 检查并删除:
client_body_in_file_only on;(避免请求体落盘) - 禁用不必要协议:
ssl_protocols TLSv1.2 TLSv1.3;(明确排除 TLSv1.0/TLSv1.1) - 清除测试用的宽松 CORS 或开放头:
add_header Access-Control-Allow-Origin "*";应改为具体域名或彻底移除 - 确认无裸露的
root或alias指向系统目录(如/etc、/usr)











