keepalive_requests本身不直接解决负载倾斜,但设为较小值(如10–50)可促使连接早关闭、回归连接池,配合least_conn调度和max_conns限制,提升连接再分配概率,缓解后端压力失衡。

keepalive_requests 本身不直接解决负载倾斜,但它配合连接复用策略和调度算法,能间接缓解因连接分布不均导致的后端压力失衡。
理解“倾斜”根源
长连接场景下,“倾斜”常源于:客户端复用连接、Nginx未及时感知连接真实负载、后端服务器处理能力差异未被调度器识别。单纯靠轮询或IP哈希,容易让某些后端长期承载大量活跃连接,而其他节点空闲。
keepalive_requests 的作用机制
该指令控制单个 keepalive 连接最多可承载多少个 HTTP 请求(HTTP/1.1 默认启用,HTTP/2 需用 http2_max_requests)。合理设置它,可避免连接“过长驻留”在某台后端:
- 设为较小值(如 10–50):促使连接更早关闭并回归连接池,Nginx 有机会在下次请求时重新执行 least_conn 或其他智能调度,提升连接再分配概率
- 设为过大值(如 1000+):一个连接可能持续服务数百请求,若初始分发到某台后端,就会长期绑定,加剧倾斜
- 需与 keepalive_timeout 协同:例如 timeout=60s + requests=30,意味着连接在 60 秒内最多处理 30 次请求,任一条件满足即回收
必须搭配的关键配置
仅调 keepalive_requests 不够,还需以下组合才能真正抑制倾斜:
- 启用 least_conn 调度:upstream 块中显式声明 least_conn,让 Nginx 基于当前活跃连接数选后端,而非简单轮询
- 限制每个 worker 的空闲连接数:用 keepalive N(如 keepalive 32)防止连接池无限膨胀,保障连接资源可控、可重调度
- 开启健康检查与 max_conns:通过 max_conns 限制每台后端最大并发连接数,配合主动健康检查,自动剔除过载或异常节点
典型配置示例
以下 upstream 设置兼顾复用效率与负载均衡性:
upstream api_backend {server 10.0.1.10:8080 max_conns=2000;
server 10.0.1.11:8080 max_conns=2000;
least_conn;
keepalive 24;
keepalive_requests 25;
keepalive_timeout 30s;
}
该配置确保连接既不过度驻留,又不会过于频繁重建;配合 least_conn 和 max_conns,使连接更均匀地落在各后端的能力边界内。


















