加权轮询不直接管理长连接复用,提升复用率关键在于确保高权重后端具备承接能力、启用合理keepalive池、叠加least_conn或sticky路由、调优proxy超时与http/1.1头配置。

加权轮询本身不直接管理长连接复用,它只决定“哪个请求发给哪台后端”,而长连接复用率高低,取决于 Nginx 与后端之间是否真正建立了可复用的 HTTP/1.1 连接,并持续被后续请求命中。在加权轮询下提升长连接复用率,关键不是调权重,而是让高权重节点更稳定、更常被复用,同时避免连接被频繁断开或闲置淘汰。
以下从配置协同角度给出实用优化方向:
确保加权节点具备长连接承接能力
加权值高的后端若自身连接池小、超时短或响应慢,Nginx 就无法长期复用其连接。需同步检查并匹配:
- 后端服务(如 Tomcat、Spring Boot)的
maxConnections和connectionTimeout应 ≥ Nginx 的keepalive数 × 并发预期; - 后端
keepAliveTimeout建议设为proxy_read_timeout + 5s以上,防止后端先断连; - 高权重节点建议部署更强网络栈(如启用
reuseport),避免TIME_WAIT积压影响新连接建立。
启用 keepalive 并合理设置池大小upstream 块中必须显式配置 keepalive,否则即使加权再高,每次请求也新建 TCP 连接:
-
keepalive 32;表示每个 worker 进程最多缓存 32 条空闲长连接; - 若某高权重点承载 70% 流量,且平均并发连接数约 20,则该节点实际复用连接数 ≈
min(32, 20),建议按(峰值QPS × 平均响应时间) × 1.2动态估算并上调; - 不要全局设过大(如 >100),会占用过多内存且可能拖慢故障感知。
配合 least_conn 或 sticky 路由增强复用倾向
纯加权轮询是“按比例发请求”,不感知连接状态,容易导致:高权重节点连接已满,新请求仍被分过去,被迫建新连。可叠加策略提升复用稳定性:
- 在
upstream中同时启用least_conn:优先选当前活跃连接最少的节点,自然倾向复用空闲连接多的高权重点; - 若业务允许,对特定路径(如
/api/v1/realtime)启用sticky cookie=JSESSIONID,使同一客户端长期落在同一高权重点,显著提升单节点连接复用深度; - 注意:
ip_hash与加权轮询冲突,不推荐混用;hash $request_uri consistent;可用于缓存友好型接口,但不适用于动态请求。
调优 proxy 超时与缓冲,减少连接中断
连接复用的前提是连接不被 Nginx 主动关闭。常见误配会频繁断连:
-
proxy_connect_timeout至少设为 3–5s,避免偶发网络抖动导致重连; -
proxy_read_timeout建议 60–120s(尤其含流式响应或 WebSocket 升级场景),太短会强制断开正在传输的长连接; -
proxy_buffering off;对流式接口可关闭缓冲,避免因缓冲区满触发连接回收; -
proxy_http_version 1.1;和proxy_set_header Connection '';必须成对出现,否则后端可能拒绝复用。
不复杂但容易忽略











