nginx中upstream最大空闲连接数由keepalive n指令设定,表示每个worker进程对每台后端服务器最多缓存n个空闲长连接,必须置于upstream块内且仅出现一次;需配合proxy_http_version 1.1和proxy_set_header connection ""生效,并建议结合keepalive_requests与keepalive_timeout优化生命周期。

在 Nginx 中设置 upstream 的最大空闲连接数,关键是指定 每个 worker 进程对每台后端服务器最多缓存多少个空闲长连接,而不是全局总数。这个值由 keepalive N 指令控制,必须放在 upstream 块内,且只能出现一次。
keepalive N 的位置和语法要求
该指令只能写在 http 块下的 upstream 块中,不能嵌套在 server 或 location 里,否则启动报错:unknown directive "keepalive"。
- ✅ 正确示例:
upstream backend {
server 192.168.1.10:8080;
keepalive 64;
}
}
- ❌ 错误写法:放在 location 里、重复写多次、或跟在 server 行后面
如何合理设定 N 的数值
N 不是越大越好,需结合后端承载力与 Nginx 工作进程结构估算:
- 若后端单实例稳定并发上限为 200(如 Tomcat 的
maxConnections),Nginx 有 4 个 worker,则建议设keepalive 120~160(即 200 × 0.6~0.8) - 轻量服务(如 Node.js 或 Go 默认配置)可从
32~64起步,压测后再调优 - 理论最大空闲连接数 =
worker_processes × upstream 中 server 数量 × N
配套必须配置的 proxy 指令
只写 keepalive N 不生效。Nginx 默认用 HTTP/1.0 转发并透传 Connection: close,后端收到就断连。
-
proxy_http_version 1.1;:强制使用支持复用的协议版本 -
proxy_set_header Connection "";:清空客户端传来的 Connection 头,防止误传close - 不要手动加
Keep-Alive响应头,Nginx 会自动处理
配合生命周期控制更稳妥
从 Nginx 1.15.3+ 开始,这两个参数才真正作用于 upstream 连接池:
-
keepalive_requests 500;:单个空闲连接最多转发 500 次请求后关闭,防状态泄漏 -
keepalive_timeout 20s;:空闲连接在池中最多保留 20 秒;建议比后端空闲超时(如 Tomcat 的connectionTimeout)小 5~10 秒











