必须配置proxy_http_version 1.1、proxy_set_header Connection ""和upstream keepalive N三项,缺一不可:HTTP/1.1是长连接协议前提,清空Connection头防透传干扰,keepalive声明连接池大小以复用TCP连接。

要让 Nginx 与后端服务之间真正复用 TCP 连接,必须显式写 proxy_http_version 1.1 ——这不是可选项,而是协议层面的硬性前提。Nginx 默认向上游发的是 HTTP/1.0 请求,而 1.0 不定义持久连接,哪怕客户端用了 keep-alive,Nginx 也不会传递、不会等待、更不会归还连接。
为什么非设为 1.1 不可
HTTP/1.0 协议本身不支持长连接语义。Nginx 在该模式下:
- 不会在发往后端的请求头中添加
Connection: keep-alive - 忽略后端返回的
Keep-Alive: timeout=60, max=100响应头 - 每次响应结束就主动关闭 TCP 连接,无法交还给连接池
只有启用 HTTP/1.1,Nginx 才具备识别、传递和管理长连接的能力,为后续复用提供协议基础。
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
必须同步完成的三项关键配置
单设 proxy_http_version 1.1 只是起点,缺一不可:
-
清空 Connection 请求头:加
proxy_set_header Connection "";,避免把客户端传来的Connection: close或其他异常值透传给后端,干扰其长连接判断 -
启用 upstream 连接池:在
upstream块中配置keepalive 32;(数值按实际并发调整),表示每个 worker 进程最多缓存 32 个空闲连接供复用 -
确认后端支持 keep-alive:例如 Tomcat 需设置
connectionTimeout为非零值;Node.js 默认支持,但需确保未在代码中调用req.socket.destroy()等强制断连操作
典型 location 配置片段
以下是最小可行配置,直接放在 location 块内即可生效:
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://backend;
配套超时与验证要点
配置完还需适配业务节奏并验证是否真正生效:
-
调优超时参数:如
proxy_connect_timeout 5s、proxy_send_timeout 30s、proxy_read_timeout 30s,建议略大于后端典型响应耗时 -
WebSocket 场景特别注意:需额外配置
proxy_set_header Upgrade $http_upgrade;和proxy_set_header Connection $connection_upgrade;(用 map 动态设置),并关闭缓冲:proxy_buffering off; -
验证方法:用
ss -tnp | grep :8080查看 ESTABLISHED 连接数是否稳定;抓包确认多个请求是否共享同一 TCP 流;对比开启前后 QPS 提升幅度

















