要真正提升Nginx集群与后端服务连接复用率,关键在于协议行为、请求头控制、连接池管理三者严格对齐;必须配齐proxy_http_version 1.1、proxy_set_header Connection ''和upstream keepalive三项配置,缺一不可,否则复用率归零。

要真正提升 Nginx 集群与后端服务之间的连接复用率,关键不是调大某个单一参数,而是让协议行为、请求头控制、连接池管理三者严格对齐。配置缺一不可,否则即使写了 keepalive 64,复用率依然接近于零。
必须配齐的三项基础配置
这三项是复用生效的前提,任意一项缺失都会导致 upstream 连接池形同虚设:
-
启用 HTTP/1.1 协议:在
location或server块中添加proxy_http_version 1.1;。HTTP/1.0 默认关闭持久连接,不设此项,后端收到请求后会立即断连。 -
清空 Connection 请求头:加上
proxy_set_header Connection "";。否则 Nginx 可能将客户端发来的Connection: close转发给后端,强制关闭连接。 -
声明连接池大小:在
upstream块中设置keepalive 32;(建议值 16–64)。它表示每个 worker 进程最多缓存 32 个空闲连接到该后端,不是全局总数——8 个 worker 就是 256 条上限。
HTTPS 后端需额外启用 TLS 会话复用
若后端是 HTTPS 接口(如微服务网关、SaaS API),仅复用 TCP 连接还不够,还需跳过重复 TLS 握手:
- 在
upstream块中启用proxy_ssl_session_reuse on;(Nginx 1.19.4+ 支持)。 - 确保后端开启 TLS session cache 或 session ticket,并使用统一密钥;否则票据无法恢复,复用失败。
- 避免在
proxy_pass中频繁切换域名或证书,否则连接池会被隔离,复用率下降。
合理控制单连接生命周期
复用不是“永不关闭”,而是“及时释放、按需复用”:
-
keepalive_timeout:建议设为 20–45 秒,且必须小于后端空闲超时(如 Tomcat 的
connectionTimeout)。若 Nginx 想复用,后端已关,复用就失效。 - keepalive_requests:默认 100 容易触发高频建连;高并发 API 场景建议设为 500–1000;前端整页加载类请求可设至 2000。
-
后端响应头检查:若后端返回
Connection: close(常见于错误响应、WAF 干预、调试开关开启),Nginx 会立即释放该连接,无法复用。
验证是否真的复用成功
别只看配置有没有写,要用实际现象确认效果:
- 在 Nginx 机器执行:
ss -tan | grep :后端端口 | grep ESTAB | wc -l,压测中连接数应稳定在worker_processes × keepalive附近,而非随 QPS 持续上涨。 - 在后端服务器运行:
ss -s | grep -i time_wait,复用率提升后,TIME_WAIT 数量应明显下降(理想下降 50% 以上)。 - Nginx 开启 debug 日志(
error_log /path/to/error.log debug;),搜索keepalive.*reuse,看到大量 reuse 行为、极少create connection,说明复用已起效。


















