需配合使用 server_tokens off、proxy_hide_header Server 和 add_header Server 自定义值来隐藏后端及 Nginx 的 Server 信息:1. 全局禁用 Nginx 版本号;2. 在 proxy_pass 所在 location 中屏蔽后端 Server 响应头;3. 可选添加自定义 Server 值;4. 用 curl -I 验证生效。

默认情况下,Nginx 作为反向代理时会将后端服务(如 Tomcat、Node.js、Django 等)返回的 Server 响应头原样透传给客户端,这可能暴露后端技术栈,带来安全风险。要隐藏真实 Server 信息,不能只靠 proxy_set_header(它只修改**请求头**),而需使用 proxy_hide_header 和 server_tokens off 配合,并可选地用 add_header 设置自定义 Server 值。
1. 禁用 Nginx 自身的 Server 版本标识
先关闭 Nginx 主动输出的版本号,避免泄露 Nginx 版本:
http {
server_tokens off; # 关键:禁用响应头中的 "Server: nginx/1.24.0"
}该指令作用于整个 http 块,也可放在 server 或 location 块中做局部控制。
2. 隐藏后端返回的 Server 响应头
后端应用(如 Spring Boot 默认返回 Server: Apache-Coyote/1.1)的响应头需主动屏蔽:
- 在对应的
location块中添加:proxy_hide_header Server; - 注意:
proxy_hide_header只影响**响应头**,且必须写在proxy_pass所在的 location 内才生效 - 若后端还返回其他敏感头(如
X-Powered-By),一并隐藏:proxy_hide_header X-Powered-By;
3. (可选)统一设置自定义 Server 值
隐藏后若希望显示统一标识(如公司名或抽象名称),可用 add_header 覆盖(注意:add_header 在 0.7.48+ 支持覆盖已存在 header):
add_header Server "MyApp-Gateway";- 该行需放在
proxy_pass后面,否则可能被后端响应头覆盖 - 注意:add_header 默认继承上级作用域,建议在 location 中显式设置以避免意外继承
4. 验证是否生效
重启 Nginx 后,用 curl 检查响应头:
curl -I https://your-domain.com
确认结果中不再出现后端 Server 值(如 Tomcat、uWSGI),且 Nginx 自身版本号也不显示;若设置了 add_header,则应看到你指定的 Server 字符串。










