后端连接复用是Nginx负载均衡稳定高效的关键,需协同upstream keepalive连接池、HTTP/1.1协议、清空Connection头、合理超时设置及least_conn调度算法共同实现。

后端连接复用是 Nginx 负载均衡稳定高效的关键,核心在于避免频繁建连导致的 TIME_WAIT 堆积、端口耗尽和后端资源浪费。它不是简单开启 keepalive,而是需协同协议版本、头信息控制、超时设置与调度算法共同生效。
启用 upstream keepalive 连接池
这是复用的基础动作,必须在 upstream 块中显式声明,否则 Nginx 默认不复用连接:
- keepalive 值建议设为 16–64,应略高于单个 worker 进程的并发请求峰值(例如 worker_connections 为 1024,平均并发 200,则 keepalive 可设为 32–48)
- 值过大易占满后端连接上限;过小则连接池太浅,仍频繁重建
- 每个 worker 进程独立维护自己的连接池,因此总空闲连接数 ≈ worker 数 × keepalive
强制 HTTP/1.1 并清除 Connection 头
即使 upstream 启用了 keepalive,若 proxy_http_version 或 Connection 头配置不当,Nginx 仍会主动断开复用:
- 必须设置 proxy_http_version 1.1(HTTP/1.1 是 keepalive 的协议前提)
- 必须设置 proxy_set_header Connection ''(清空该 header,防止后端返回 Connection: close 导致连接被提前关闭)
- 若后端是 HTTPS,且支持 HTTP/2,可升级为 proxy_http_version 2.0,并配合 https:// 后端地址与 keepalive,实现多路复用
匹配超时参数,防止连接滞留
连接复用依赖“空闲但可用”,超时设置不合理会导致连接过早释放或长期僵死:
- proxy_connect_timeout 控制建连时间,建议 1–3 秒,避免阻塞新请求
- proxy_send_timeout 和 proxy_read_timeout 应略大于后端典型处理时长(如 API 平均响应 8s,可设为 15–25s)
- upstream 级别无需单独配 keepalive_timeout(那是客户端到 Nginx 的),但需确保后端服务自身的 keepalive timeout > Nginx 的 proxy_read_timeout
选用 least_conn 调度算法提升均衡性
长连接场景下,轮询(round robin)容易造成连接数倾斜——活跃连接持续复用,新连接不断打向同一台后端:
- least_conn 会优先将新请求分发给当前活跃连接数最少的后端,天然适配长连接生命周期
- 配合 keepalive 使用,能显著降低连接分布标准差(实测偏差率可从 50% 降至 5% 以内)
- 避免使用 ip_hash,它会把同一客户端所有长连接绑定到固定节点,加剧不均


















