keepalive_requests用于限制单个长连接最多处理的请求数,达上限后Nginx主动关闭连接;默认值100,需配合keepalive_timeout使用,二者任一触发即断连,配置于http/server/location块,设为0不推荐。

在 Nginx 中,keepalive_requests 用于控制一个长连接(keep-alive connection)最多能处理多少个请求后就关闭。它不是设置“是否启用长连接”,而是限制单个连接的请求上限,防止连接长期占用资源或积累状态问题。
作用与默认值
该指令必须放在 http、server 或 location 块中,且仅对启用了 keep-alive 的连接生效(即客户端发送了 Connection: keep-alive,且服务端也返回了相同头)。默认值是 100,意味着一个 TCP 连接最多服务 100 个请求,之后 Nginx 主动关闭连接。
如何配置
直接在对应作用域内添加配置即可,例如:
http {
keepalive_requests 1000;
<pre class="brush:php;toolbar:false;">server {
listen 80;
location /api/ {
keepalive_requests 500; # 覆盖 http 级别设置
}
}}
- 数值设为 0 表示不限制请求数(不推荐,可能引发连接堆积)
- 建议根据业务特点调整:静态资源可设高些(如 1000),高频短请求接口可适当降低(如 200–500)
- 需配合
keepalive_timeout使用——前者管“请求数”,后者管“空闲时间”,两者共同决定连接生命周期
常见搭配与注意事项
单独调高 keepalive_requests 并不能提升并发性能,还需注意:
- 客户端是否真正复用连接(浏览器通常支持,但某些 SDK 或旧客户端可能不发 keep-alive 头)
- 上游代理(如负载均衡器)是否透传 Connection 头,否则 Nginx 收不到 keep-alive 请求
- 如果使用 HTTP/2,keepalive_requests 不生效(HTTP/2 原生多路复用,无需传统 keep-alive 控制)
- 修改后需重载配置:
nginx -s reload,无需重启进程
怎么验证是否生效
可通过响应头和日志辅助判断:
- 查看响应是否有
Connection: keep-alive,并检查Keep-Alive: timeout=XX, max=YY(其中max即为keepalive_requests设置值) - 开启
log_format记录$connection_requests变量,观察单连接处理请求数是否接近设定阈值 - 用
curl -v http://example.com观察连接复用行为,或用ab/wrk做压测对比











