最直接、可靠的方式是用 proxy_set_header HeaderName "" 删除请求头;Nginx 将双引号包围的空字符串识别为删除指令,而非发送空值,适用于 X-Forwarded-For、User-Agent 等头的精准清理。

在 Nginx 反向代理中丢弃不需要的客户端请求头,最直接、可靠的方式是用 proxy_set_header 将其值设为空字符串 ""。Nginx 会将该空值识别为“删除该请求头”,而不是发送一个空内容的头字段。
用空字符串精准删除指定请求头
只需在 location 或 server 块中添加对应配置:
-
proxy_set_header X-Forwarded-For "";—— 单层可信代理下无需透传,可防 IP 链伪造 -
proxy_set_header User-Agent "";—— 避免后端依据 UA 做不必要判断或记录 -
proxy_set_header Referer "";—— 若后端不依赖来源页信息,统一剥离更干净 -
proxy_set_header Origin "";—— 配合 CORS 策略,由 Nginx 主动控制而非信任客户端 -
proxy_set_header Proxy-Connection "";—— 清除 HTTP/1.0 遗留字段,避免干扰连接复用
注意:必须写成双引号包围的空字符串 "",不能省略引号,也不能写成 off、none 或不带引号的空格。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
区分请求头与响应头的删除逻辑
要删的是客户端发给 Nginx、再由 Nginx 转发给后端的请求头 → 用 proxy_set_header HeaderName "";
要删的是后端返回给 Nginx、再由 Nginx 返回给客户端的响应头 → 用 proxy_hide_header HeaderName。
两者作用对象不同,不可混用。
验证是否真正生效
推荐两种轻量验证方式:
- 在后端服务(如 Flask、FastAPI 或本地监听的 Nginx 端口)日志中检查
$http_x_forwarded_for、$http_user_agent等变量是否为空 - 用
tcpdump抓包确认后端收到的原始请求中是否已无该头:tcpdump -i lo -A port 8000 | grep -E "^(X-Forwarded-For:|User-Agent:)"
补充说明:哪些头默认就不转发?
Nginx 默认会忽略部分“不安全”或“协议相关”的请求头,例如:Host、Connection、Keep-Alive、Proxy-Authenticate、TE、Upgrade、Content-Length(当使用 chunked 编码时)等。
如需透传其中某一项(比如 Host),必须显式配置:proxy_set_header Host $host;

















