nginx 中限制反向代理连接池大小的核心是 upstream 块的 keepalive 指令,它设定每个 worker 进程到后端的空闲长连接数,实际总空闲连接数为 keepalive × worker_processes,且必须配合 proxy_http_version 1.1 和 proxy_set_header connection "" 才生效。

在 Nginx 中限制反向代理的连接池大小,核心是控制 每个 worker 进程到 upstream 的空闲长连接数量,这由 upstream 块中的 keepalive 指令决定——它不是全局连接数上限,而是每个 worker 维护的“可复用连接池”容量。
upstream 块里的 keepalive 参数
这个值直接设定连接池大小,单位是「连接数」,仅作用于该 upstream。例如:
upstream backend {
server 127.0.0.1:8000;
keepalive 32; # 每个 worker 最多缓存 32 个空闲到此后端的连接
}
- 设为
0表示禁用长连接,每次请求都新建 TCP 连接 - 设为正整数(如
64、128)表示该 worker 可维持的空闲连接上限 - 实际总空闲连接数 =
keepalive × worker_processes,比如 4 个 worker + keepalive 64 → 最多 256 个空闲连接
配套必须启用 HTTP/1.1 长连接
仅设 keepalive 不生效,还需在 location 中显式开启上游长连接:
-
proxy_http_version 1.1;—— 强制发 HTTP/1.1 请求(HTTP/1.0 不支持 keep-alive) -
proxy_set_header Connection "";—— 清空 Connection 头,避免被误判为关闭连接
缺一不可。否则 Nginx 仍按默认 HTTP/1.0 短连接方式与后端通信,keepalive 完全无效。
合理设置 keepalive 值的参考方法
不宜拍脑袋填,应结合业务并发和 worker 分布估算:
- 先预估系统峰值并发连接数(如 5000)
- 查当前
worker_processes数量(如 4) - 按公式:(
峰值并发 ÷ worker_processes) × 1.2 ≈ 单 worker 所需连接池容量 - 例如:5000 ÷ 4 = 1250,×1.2 ≈ 1500 → 设
keepalive 1500
过小会导致连接频繁重建;过大则空闲连接长期占用内存和端口资源。
注意与其它连接参数区分
keepalive(upstream 级)和以下参数无关,别混淆:
-
keepalive_timeout:控制 client 到 Nginx 的空闲超时(默认 75s) -
keepalive_requests:单个 client 连接最多处理多少请求(默认 100) -
worker_connections:每个 worker 能处理的总连接数(含 client 和 upstream)
它们各自作用于不同链路,需协同调优,但不能互相替代。











