nginx upstream的keepalive n表示每个worker进程对每台后端服务器最多缓存n个空闲长连接,用于复用;需配合proxy_http_version 1.1、proxy_set_header connection ''及后端http/1.1支持方可生效。

Nginx 处理 upstream 中的 keepalive 参数,本质是为每个 worker 进程维护一个到该 upstream 组内各后端服务器的空闲连接池,不是限制总连接数,也不控制活跃连接建立,而是管理“可复用”的闲置长连接数量。
keepalive N 的实际行为
- 它表示:单个 Nginx worker 进程,对 upstream 中的每一台后端服务器,最多缓存
N个已建立、当前空闲、等待复用的 HTTP/1.1 长连接。 - 例如:
upstream backend { server a:80; server b:80; keepalive 32; },4 个 worker 进程,则最多缓存4 × 2 × 32 = 256个空闲连接(每台后端、每个 worker 各 32 个)。 - 超出该数时,Nginx 会主动关闭最近最少使用(LRU)的空闲连接,不拒绝新请求——新请求仍可建新连接,只是复用率下降。
它不做什么
- 不限制 worker 到后端的总并发连接数(活跃请求仍会新建连接);
- 不代替后端做连接准入控制(如 Tomcat 的
maxConnections); - 不影响
keepalive_timeout或keepalive_requests的生命周期判断逻辑; - 不作用于客户端连接(那是
http { keepalive_timeout ... }管的)。
触发清理的两个条件(任一满足即断开空闲连接)
- 连接空闲时间 ≥
upstream块中配置的keepalive_timeout(如未设,则用全局proxy_timeout默认值); - 该连接已转发请求数 ≥
upstream块中配置的keepalive_requests(注意:此参数在 upstream 块里才作用于后端连接)。
配置生效的硬性前提
-
keepalive N必须写在upstream { }块内,且单独成行(不能跟在server行后面); - 对应
location中必须有:-
proxy_http_version 1.1; -
proxy_set_header Connection '';
-
- 后端服务本身支持并维持 HTTP/1.1 长连接(如 Tomcat 的
connectionTimeout > keepalive_timeout)。
不复杂但容易忽略。











