keepalive_requests 控制单个长连接最多处理的请求数,默认100,作用于http/server层级,需启用keepalive才生效;与keepalive_timeout为“或”关系,location中不支持配置。

在 Nginx 中,keepalive_requests 是控制单个长连接最多处理多少个请求的参数,默认值为 100。它作用于 http、server 和 location 三个层级,但只有在启用了 keepalive 连接的前提下才生效(即客户端使用 HTTP/1.1 并发送 Connection: keep-alive,且服务端也开启 keepalive)。
server 块内可独立设置 keepalive_requests
虽然该指令默认继承自 http 块,但在 server 块中显式配置是完全支持的,可用于实现不同虚拟主机的差异化连接复用策略:
- 高并发、轻量接口类站点(如 API 服务)可适当调高,例如
keepalive_requests 1000;,减少 TCP 握手开销 - 静态资源站或带大文件下载的站点建议保持默认或略降,避免长连接被大响应阻塞太久
- 面向老旧客户端(如某些嵌入式设备)的虚拟主机,可设为较低值(如 10~50),兼容连接管理能力弱的客户端
注意 keepalive_timeout 与 keepalive_requests 的协同
这两个指令共同决定长连接生命周期:
- keepalive_timeout 控制空闲连接保留时间
- keepalive_requests 控制活跃连接最大请求数
两者是“或”关系:任一条件满足,连接就会关闭。
例如:
keepalive_timeout 60s; keepalive_requests 500;
表示:该 server 下的 keepalive 连接,只要处理满 500 个请求,或空闲超 60 秒,就断开。
不支持 location 级别的 keepalive_requests 设置
该指令不能出现在 location 块中,Nginx 启动时会报错:"keepalive_requests" directive is not allowed here。如果需要按路径做连接行为差异,只能通过以下方式间接实现:
- 用不同
server块(绑定相同 IP:Port 但靠server_name区分),再各自配置keepalive_requests - 配合
map指令 + 自定义变量做日志标记或限流,但无法改变底层连接复用逻辑 - 借助上游代理(如另一个 Nginx 实例)对特定路径做反向代理,并在其 server 块中独立控制
验证配置是否生效
可通过以下方式确认:
- 检查 Nginx 配置语法:
nginx -t - 查看运行时连接状态:使用
nginx -V 2>&1 | grep -o with-http_v2_module确认模块支持;结合stub_status模块(需启用)观察Active connections和Reading/Writing/Waiting状态变化 - 抓包验证:用
tcpdump或 Wireshark 观察同一 TCP 连接上是否承载了预期数量的 HTTP 请求










