要让Nginx通过proxy_pass与后端保持连接存活,必须协同配置三项:proxy_http_version 1.1、proxy_set_header Connection ""、upstream keepalive N;缺一不可,否则无法实现真正的连接复用。

要让 Nginx 通过 proxy_pass 与后端保持连接存活,关键不是只写一个 proxy_pass,而是必须协同配置协议版本、请求头和连接池三要素。否则每次请求都会新建 TCP 连接,造成资源浪费和延迟上升。
必须配齐的三项基础设置
这三项缺一不可,单独设置任一项都无法实现真正的连接复用:
-
启用 HTTP/1.1 协议:在
location或server块中添加proxy_http_version 1.1;。HTTP/1.0 默认不支持长连接,Nginx 若不显式升级,后端会收到短连接请求并立即关闭连接。 -
清空 Connection 请求头:加上
proxy_set_header Connection "";。防止客户端传来的Connection: close被透传给后端,导致后端误判为需断连。 -
声明 upstream 连接池大小:在
upstream块内配置keepalive 32;(建议值 16–64)。它表示每个 worker 进程最多缓存多少个空闲连接到该后端,不是全局总数,也不是每台后端固定数量。
注意 upstream keepalive 的位置和含义
keepalive N 必须写在 http 块内的 upstream 定义中,不能放在 server 或 location 里。它的作用是控制 Nginx 到后端的连接复用,和客户端到 Nginx 的 keepalive_timeout 无关。
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 若后端有 2 台、Nginx 有 4 个 worker,最大空闲连接数为
32 × 2 × 4 = 256个。 - 该值不宜过大,需参考后端连接池上限(如 Tomcat 的
maxConnections),避免后端拒绝新连接。
验证是否真正生效
光看配置没用,得从运行行为确认:
- 检查 Nginx
error.log:频繁出现upstream prematurely closed connection表示后端主动断连,可能因后端未开启长连接支持(如 Spring Boot 默认关闭)。 - 观察系统连接状态:用
ss -tn | grep :端口查看 ESTABLISHED 连接是否稳定存在,而非随请求激增又归零。 - 监控后端活跃连接数:应趋于平稳,而不是随 QPS 线性增长。
补充防静默断连(可选但推荐)
若后端或中间网络设备存在空闲超时机制,可在 location 中启用:
-
proxy_socket_keepalive on;:让 Nginx 底层 socket 启用 TCP keepalive 探测,防止连接被中间设备静默关闭。

















