必须在 upstream 块中配置 keepalive_requests 并配合 keepalive 指令使用,用于限制每个后端长连接最多复用的请求数,达到后立即关闭该连接。

要限制单个后端长连接(即 Nginx 到 upstream 的连接)上可复用的最大请求数,必须在 upstream 块 中配置 keepalive_requests,并配合 keepalive 指令使用。这个参数只对反向代理场景中的后端连接生效,不作用于客户端直连。
必须放在 upstream 块中,且需启用 keepalive
该指令仅在定义上游服务器的 upstream 块内有效,并且只有在同时启用 keepalive 时才起作用:
-
keepalive N;:设置连接池大小(即最多缓存多少个空闲长连接) -
keepalive_requests M;:设置每个被复用的长连接最多处理 M 个请求后关闭
示例配置:
upstream backend {server 10.0.1.10:8080;
keepalive 32;
keepalive_requests 50;
}
注意:若未写 keepalive,keepalive_requests 将被忽略。
它控制的是“每个后端连接”的生命周期,不是并发或总连接数
每条从 Nginx 复用到后端的 TCP 连接,都独立维护一个计数器:
- 每次成功完成一次
proxy_pass请求,计数器 +1 - 达到设定值(如 50)后,Nginx 在响应发送完毕后立即关闭该连接,不等待
keepalive_timeout - 新请求会优先复用池中其他未达限的连接;若无可用,则新建连接,计数器重置为 0
合理取值需结合后端特性和压测验证
默认值 100 对多数 API 网关偏高,容易导致 Worker 内存缓慢增长。建议按场景调整:
- 后端稳定、请求轻量(如 JSON API):从 20–50 起步压测
- 后端偶发延迟或内存敏感(如 Java 应用 GC 波动):设为 10–20,加快异常连接退出
- 静态资源转发或高吞吐小包:可适度提高至 100–200,但需监控 RSS 内存曲线是否呈锯齿状波动
- 切忌设为 1:失去复用意义,退化为短连接,增加 TCP 握手和 TIME_WAIT 压力
必须与 keepalive_timeout 协同设置
keepalive_requests 和 keepalive_timeout 是“或”关系,任一触发即断连:
-
keepalive_timeout 60s;放在upstream块外(如 http 或 upstream 同级的 proxy 配置块中) - 它兜底防止连接因空闲过久而长期滞留,尤其当后端响应慢或客户端请求稀疏时
- 推荐将
keepalive_timeout设为keepalive_requests预期耗时的 1.5–2 倍(例如请求速率为 20 req/s,设 timeout=3–5s)











