禁用 Nginx 敏感调试信息输出的核心是分层阻断泄露路径:关闭 debug/info 日志级别、启用 server_tokens off 隐藏版本标识、自定义安全日志格式剔除 $args 等敏感字段、在代理敏感接口时用 proxy_hide_header 清除调试响应头并启用 proxy_intercept_errors 阻断后端错误页透出。

禁用 Nginx 中敏感的调试信息输出,核心是切断两类泄露路径:一是 Nginx 自身日志中记录过多细节,二是错误响应页或响应头中暴露系统版本、堆栈或配置线索。这不是简单“关掉一个开关”,而是分层控制。
关闭低级别日志(尤其是 debug 和 info)
debug 级别会完整记录请求头、变量值、响应体甚至内存地址,极易泄露密码、Token、原始参数:
- 将 error_log 级别设为 warn 或 error,严禁在生产环境使用
info或debug:error_log /var/log/nginx/error.log warn; - 检查全局
http块、各server块,确保没有残留的error_log ... debug; - 若需临时排查,仅在特定
location内启用,问题定位后立即还原
隐藏错误响应页中的服务标识
Nginx 默认错误页(如 502、404)会明文显示软件名和版本号,攻击者可据此搜索已知漏洞:
- 在
http或server块中添加:server_tokens off; - 该指令可屏蔽所有 HTTP 响应头和错误页中的
Server: nginx/1.24.0字样 - 注意:它不影响后端返回的
Server头——那需要配合proxy_hide_header Server;
禁用或精简访问日志中的敏感字段
默认日志格式(如 log_format combined)可能包含 $request(含查询参数)、$http_cookie、$http_authorization 等高危变量:
- 自定义安全日志格式,显式剔除风险字段:
log_format secure '$remote_addr - $remote_user [$time_local] "$request_method $uri" $status $body_bytes_sent'; - 避免在
access_log中使用$args、$http_cookie、$request_body、$http_x_forwarded_for(易被伪造) - 对登录、重置密码等敏感接口,可单独配置
access_log off;
拦截后端透传的调试头与错误堆栈
很多敏感信息并非 Nginx 主动记录,而是后端应用(PHP/Node.js/Java)把调试头或异常堆栈直接写入响应,Nginx 被动转发:
- 在代理敏感接口的
location中,清除常见调试响应头:proxy_hide_header X-Debug-Info;<br>proxy_hide_header X-Trace-ID;<br>proxy_hide_header X-Powered-By;<br>proxy_hide_header X-Runtime;
- 启用
proxy_intercept_errors on;并配error_page 500 502... /50x.html;,防止后端原始错误页(含堆栈)直接暴露给用户 - 确认后端自身关闭调试输出:PHP 设置
display_errors = Off;Spring Boot 关闭server.error.include-stacktrace=never


















