Nginx 默认硬编码屏蔽 Server 响应头,proxy_pass_header Server 无效;需先 proxy_hide_header "" 清空隐式屏蔽,再 proxy_pass_header Server,并排除 server_tokens off、add_header 覆盖及 CDN/WAF 干扰。

直接配置 proxy_pass_header Server 是无效的,Nginx 默认禁止透传 Server 响应头,且该头属于“受保护响应头”,不能靠简单一行指令放开。要让客户端看到后端真实的服务标识(如 Server: nginx/1.22.1 或 Server: uvicorn),需绕过默认屏蔽机制并确保链路无干扰。
为什么 proxy_pass_header Server 不起作用
Nginx 将 Server 归类为敏感响应头,默认由 proxy_hide_header Server 隐式屏蔽(即使你没写这行,它也生效)。proxy_pass_header 仅能放行已被 proxy_hide_header 显式屏蔽的头,而 Server 是硬编码级过滤,无法用 proxy_pass_header Server 解除。
正确透传后端 Server 头的三步操作
- 先清空所有隐式屏蔽(Nginx 1.17.6+ 支持):
proxy_hide_header ""; - 再显式放行目标头:
proxy_pass_header Server; - 确认未启用可能覆盖的模块:
检查是否误启server_tokens off;(它影响 Nginx 自身的 Server 头,但不阻止透传后端的);
确保没有在同 location 中配置add_header Server ...,否则会覆盖后端值。
验证是否真正生效
别依赖浏览器开发者工具——它常隐藏或重写 Server 头。推荐用 curl -v 直连 Nginx:
curl -v https://your.domain/health
观察响应头中是否出现 Server: uvicorn 或类似字段。若仍显示 Server: nginx,说明后端根本没返回该头,或被中间层(如 CDN、WAF)剥离了。
注意事项与常见陷阱
- 某些后端框架(如 Spring Boot)默认不输出
Server头,需显式开启:server.response.server-header=nginx或移除相关过滤器 - CDN 或云 WAF(如 Cloudflare、阿里云全站加速)通常强制抹除
Server头,此时透传在 Nginx 层成功也无意义 - 安全团队常要求隐藏
Server头以减少信息泄露,上线前请确认合规要求


















