Nginx反向代理中隐藏Server头需两步:一是在http/server块设server_tokens off关闭版本号;二是在proxy_pass所在location中用proxy_hide_header Server屏蔽后端Server头,错误页暴露需用more_clear_headers或Lua彻底清除。

在 Nginx 反向代理中隐藏服务器签名(即不暴露 Server 响应头中的 nginx 及其版本号),主要通过两个层面控制:一是关闭 Nginx 自身的 Server 头输出,二是防止后端应用(如 Node.js、Tomcat、PHP-FPM)透出自己的 Server 信息被误传或覆盖。
关闭 Nginx 自带的 Server 标识
Nginx 默认会在响应头中添加 Server: nginx/1.24.0 这类字段。要隐藏它,需在配置中启用 server_tokens off;,并确保该指令作用于生效范围(http、server 或 location 块):
- 推荐放在
http块中,全局生效:
http {
server_tokens off;
...
} - 若只对某虚拟主机隐藏,可放在对应
server块内 - 注意:该指令仅移除版本号,不会删除
Server: nginx字样;如需彻底去掉 Server 头,需配合more_clear_headers(需安装 headers-more 模块)或使用proxy_hide_header配合自定义响应
屏蔽后端服务透出的 Server 头
当 Nginx 作为反向代理时,上游服务(如 Python Flask、Spring Boot)可能返回自己的 Server 头(例如 Server: Werkzeug/2.3.7)。Nginx 默认会将该头原样转发。需显式禁止:
- 在
location或server块中添加:
proxy_hide_header Server; - 如果后端还返回
X-Powered-By等敏感头,也可一并隐藏:
proxy_hide_header X-Powered-By; - 确保该指令位于
proxy_pass所在的 location 内,否则不生效
(可选)彻底移除 Server 响应头
仅用 server_tokens off 和 proxy_hide_header Server 后,Nginx 仍可能在某些情况下(如 404、502 错误页)输出 Server: nginx。要完全抹除该头,有以下方式:
- 编译安装时添加
--without-http-server-token-module(较复杂,不推荐常规使用) - 使用 headers-more-nginx-module:
more_clear_headers 'Server';(需重新编译 Nginx 或使用 OpenResty) - 通过 Lua 脚本(OpenResty)在响应阶段清除:
header_filter_by_lua_block { ngx.header.Server = nil }
验证是否生效
配置修改后,重载 Nginx(nginx -s reload),然后用 curl 检查响应头:
- curl -I https://your-domain.com
- 确认响应中不再出现
Server:行;如有,检查配置是否加载、作用域是否正确、是否有其他中间件(如 CDN、WAF)补回该头 - 特别测试错误状态码(如 404、502),它们的响应头由 Nginx 自身生成,最容易暴露 Server 信息


















