要隐藏后端Server版本,需三步协同:①server_tokens off关闭Nginx自身版本暴露;②proxy_hide_header Server屏蔽后端透传的Server头(须置于proxy_pass之后);③可选add_header Server "MyApp" always统一标识。

在 Nginx 中,proxy_pass 本身不负责隐藏后端 Server 版本;真正暴露后端版本信息的是响应头中的 Server 字段,它通常由后端应用服务器(如 Tomcat、Spring Boot、Node.js 等)生成并返回。Nginx 默认会透传这个头,因此要“隐藏真实后端 Server 版本”,关键在于**移除或覆盖响应头中的 Server 字段**,而不是修改 proxy_pass 指令本身。
关闭 Nginx 自身的 Server 头
先确保 Nginx 不主动泄露自己的版本:
- 在
http或server块中添加:
server_tokens off; - 这会让 Nginx 返回的响应头中
Server: nginx(不带版本号),但不会影响后端返回的Server头。
屏蔽或替换后端返回的 Server 头
使用 proxy_hide_header 可以阻止 Nginx 将后端的 Server 头透传给客户端:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- 在
location或server块中添加:
proxy_hide_header Server; - 这样客户端就完全收不到后端设置的
Server值(包括Server: Apache/2.4.41或Server: openresty等)。
可选:自定义统一的 Server 头(增强一致性)
如果希望所有响应都显示一个统一、中性的 Server 标识(例如公司名或服务名),可用 proxy_set_header 的反向用法 —— 实际上是用 add_header 覆盖:
- 注意:
add_header默认只对 2xx 和 3xx 响应生效,且需配合proxy_hide_header Server;使用; - 添加:
add_header Server "MyApp"; - 若需覆盖所有状态码(包括 4xx/5xx),加上
always参数:
add_header Server "MyApp" always;
验证是否生效
配置完成后重载 Nginx(nginx -s reload),然后用 curl 测试:
- curl -I https://your-domain.com
- 检查响应头中是否还有
Server:字样;若已消失或变为你设定的值,说明配置成功。 - 注意:某些后端框架(如 Spring Boot)可能通过其他方式(如
X-Powered-By)泄露信息,建议一并清理。

















