proxy_hide_header用于移除后端返回的指定响应头(如X-Powered-By、Server),仅作用于proxy_pass上游响应,不处理Nginx自身头;须置于location内proxy_pass之后,每行配置一个头,不支持正则,需配合server_tokens off隐藏Nginx自身Server版本。

proxy_hide_header 是 Nginx 作为反向代理时,用于**移除后端服务器返回的特定响应头字段**的指令,它只影响从上游(upstream)接收到的响应头,不会影响 Nginx 自己生成或添加的头(比如 Server、Date 等)。
基本用法:隐藏单个响应头
在 location 或 server 块中使用:
location /api/ {
proxy_pass https://backend;
proxy_hide_header X-Powered-By;
}
这样,当后端返回 X-Powered-By: Express 时,Nginx 会将其从最终发给客户端的响应中完全删除。
隐藏多个响应头
可以多次写 proxy_hide_header,每行一个字段:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
proxy_hide_header X-Powered-By;proxy_hide_header X-AspNet-Version;proxy_hide_header Server;
⚠️ 注意:Server 头默认由 Nginx 自己添加(值为 nginx),若要隐藏它,需额外配合 server_tokens off;(关闭版本号)和 underscores_in_headers on;(如需处理带下划线的自定义头)。
常见误区与注意事项
- 该指令**不支持通配符或正则表达式**,必须精确写出头字段名(大小写不敏感,但建议按规范大驼峰写法)。
- 它只对
proxy_pass流量生效,对fastcgi_pass、uwsgi_pass等无效——那些场景要用对应指令,如fastcgi_hide_header。 - 如果后端用了多层代理(比如后端又转发给另一个服务),
proxy_hide_header只作用于 Nginx 直接收到的那一层响应头。 - 想彻底禁用某些头(如
Server),除了proxy_hide_header,还要确认没有其他模块(如第三方模块)重新注入该头。
验证是否生效
用 curl 查看响应头即可:
curl -I https://your-domain.com/api/test
对比开启/注释 proxy_hide_header 后的输出,确认目标头已消失。也可用浏览器开发者工具的 Network 面板检查 Response Headers。

















