proxy_set_header Connection "" 的作用是显式移除客户端传来的 Connection 头,防止其透传干扰上游对长连接的判断;需配合 proxy_http_version 1.1 和 upstream keepalive 才能真正启用长连接。

这个配置的作用不是“清空 Connection 头”,而是**显式移除或覆盖客户端传来的 Connection 头**,从而避免 Nginx 将其透传给上游,干扰后端对长连接的判断。关键在于理解 Connection 是 hop-by-hop 头部——它只在单跳(如客户端→Nginx 或 Nginx→上游)有效,不应跨跳传递。
Connection 头为什么必须处理
客户端可能发送 Connection: close 或 Connection: keep-alive,但这些值仅对客户端到 Nginx 这一跳有意义。若 Nginx 不加干预直接转发给上游,后端可能误判连接意图(比如收到 close 就主动断开),导致 Keepalive 失效、连接频繁重建、性能下降。
proxy_set_header Connection "" 的效果是:当该指令存在时,Nginx 会完全不发送 Connection 头给上游(而不是发一个空值)。这是 Nginx 的内部行为——空字符串值触发 header 删除逻辑。
必须搭配 upstream keepalive 配置才有效
单独设置 Connection "" 并不能“保持畅通”,它只是移除了干扰项。真正维持 Nginx 与上游之间的长连接,依赖以下两项:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
-
upstream 块中启用 keepalive:例如
keepalive 32;(表示每个 worker 进程最多缓存 32 个空闲连接到该 upstream) -
proxy_http_version 设为 1.1:因为 HTTP/1.0 默认无持久连接,HTTP/1.1 才默认启用;需配
proxy_http_version 1.1;
这两项缺一不可。否则即使 Connection 头被清掉,Nginx 仍会按 HTTP/1.0 方式发起短连接请求。
典型安全配置组合
实际使用中,应配合其他 hop-by-hop 头一并清理,避免意外透传。推荐写法如下:
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
# 其他必要头...
}
<p>upstream backend {
server 127.0.0.1:8000;
keepalive 32;
}注意:Upgrade 和 Connection 通常成对出现(用于 WebSocket 升级),所以 Connection "" 同时也为 WebSocket 场景做好准备。如果不需要 WebSocket,Upgrade 可省略,但 Connection "" 仍建议保留。
验证是否生效
可通过抓包或日志确认:
- 用
tcpdump或 Wireshark 抓 Nginx 到 upstream 的 TCP 流,检查 HTTP 请求头中是否不含Connection:行 - 开启 Nginx debug 日志(
error_log /path/to/log debug;),搜索http proxy headers相关输出,可看到实际发送的 header 列表 - 观察 upstream 的连接复用情况:如后端是 Node.js 或 Go,可通过其连接池统计确认活跃长连接数是否稳定

















