必须同时配置proxy_http_version 1.1、proxy_set_header connection ''和upstream keepalive三项,缺一不可;keepalive n表示每个worker进程对每台后端服务器最多缓存n个空闲连接,需结合后端承载力与worker_processes合理设置,并通过ss命令验证estab连接数是否稳定。

在 Nginx 负载均衡中配置连接池,核心是启用 HTTP/1.1 长连接 + 后端 keepalive 连接池,避免每次请求都新建 TCP 连接。这不是简单的“开启一个开关”,而是 客户端→Nginx→后端服务 三层协同的结果。
1. 启用后端 keepalive 连接池(关键一步)
在 upstream 块中使用 keepalive 指令,它定义的是 Nginx 与每个后端服务器之间可复用的空闲连接数:
- 必须配合
proxy_http_version 1.1和proxy_set_header Connection ""使用,否则 Nginx 默认用 HTTP/1.0 与后端通信,无法复用连接 -
keepalive N中的N是每个 worker 进程为该后端维护的**最大空闲连接数**,不是总连接数;例如设为32,4 个 worker 最多可缓存 128 条空闲连接 - 示例配置:
upstream backend_api {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
keepalive 32; # 每个 worker 对每个 server 最多保留 32 条空闲长连接
}
<p>server {
location /api/ {
proxy_pass <a href="https://www.php.cn/link/2da3df196ff25fa5183cddba80a6df9b">https://www.php.cn/link/2da3df196ff25fa5183cddba80a6df9b</a>;
proxy_http_version 1.1;
proxy_set_header Connection "";</p><h1>其他必要代理头...</h1><pre class="brush:php;toolbar:false;">}}
2. 客户端到 Nginx 的长连接控制
确保浏览器或上游调用方能复用连接到 Nginx,需设置:
-
keepalive_timeout 60s;:客户端连接空闲多久后关闭(建议 30–75 秒) -
keepalive_requests 1000;:单个连接最多处理多少请求后关闭,防资源长期占用 - 若客户端支持 HTTP/2,优先启用
http2(自动实现多路复用,无需依赖多个 TCP 连接)
3. 系统与 Nginx 连接资源匹配
连接池生效的前提是系统不因资源不足而拒绝建连:
- 调高文件描述符限制:
worker_rlimit_nofile 65535; - 增大每个 worker 并发能力:
worker_connections 10240; - Linux 内核优化(需修改
/etc/sysctl.conf):
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
4. 验证是否生效
可通过以下方式确认连接池起效:
- 查看后端服务的活跃连接数是否趋于稳定(而非随 QPS 波动剧烈上升)
- 用
ss -tan | grep :8080 | wc -l观察 Nginx 机器到后端的 ESTAB 连接数是否接近keepalive × worker 数 × 后端数量 - 检查 Nginx 日志中是否有大量
upstream prematurely closed connection(说明后端主动断连,可能与后端 keepalive 设置冲突)











