keepalive_requests 是 nginx 控制单个长连接最多处理请求数的参数,达阈值后主动关闭连接以避免空闲连接长期滞留、耗尽资源;需与 keepalive_timeout 协同设置,二者为“或”关系,任一触发即断连。

Keepalive_requests 是 Nginx 中控制单个长连接(keep-alive 连接)最多处理多少个请求的参数,它本身不“防止单条长连接占用”,而是通过主动断开已达成上限的空闲连接,来避免连接长期滞留、耗尽连接资源。关键在于合理设置该值,并配合 keepalive_timeout 协同使用。
理解 keepalive_requests 的作用机制
当客户端启用 HTTP/1.1 keep-alive 时,一个 TCP 连接可复用多次请求。Nginx 默认不限制单连接请求数(0 表示不限),若后端响应慢、客户端发包节奏低、或存在异常保活行为,就可能出现一条连接挂起几十分钟甚至更久,持续占用 worker 进程的连接槽位和内存。keepalive_requests 的作用是:当该连接上累计完成的请求数达到设定值,Nginx 就会在响应末尾发送 Connection: close,并在当前请求结束后关闭连接——哪怕 keepalive_timeout 还没到。
合理设置 keepalive_requests 值
没有通用最优值,需结合业务特征调整:
- 静态资源为主(如图片、JS/CSS):单次页面加载可能发起 20–50 个请求,建议设为 50–100,兼顾复用率与连接释放速度
- API 接口服务(如前后端分离):客户端通常按需发起请求,连接复用频次较低,设为 10–30 更稳妥,防止连接空转
- 高并发短连接场景(如爬虫、压测流量):可设为 1–5,快速回收,避免被恶意长连接拖垮
- 注意不要设为 0:这会禁用 keep-alive,所有请求都走短连接,显著增加 TIME_WAIT 和握手开销
必须配合 keepalive_timeout 使用
keepalive_requests 控制“请求数上限”,keepalive_timeout 控制“空闲时间上限”,两者是“或”关系:任一条件满足即断连。例如:
keepalive_requests 20;keepalive_timeout 60s;
表示:一条连接最多服务 20 个请求;或即使只处理了 5 个请求,但第 5 个响应后 60 秒内无新请求,也会断开。二者叠加才能覆盖“高频请求耗尽计数”和“低频请求空转超时”两类问题。
检查并确认配置生效
仅修改 nginx.conf 不够,还需验证实际行为:
- 用 curl -v 发起多次请求,观察响应头是否含 Connection: keep-alive 或 close
- 通过 ss -tnp | grep :443 观察 ESTABLISHED 连接数变化趋势,对比配置前后长连接堆积情况
- 开启 Nginx stub_status 模块,关注 Active connections 和 Reading/Writing/Waiting 状态分布,识别异常 Waiting 连接










