keepalive_requests 是 nginx 控制单个长连接最多处理 http 请求次数的指令,超限后返回 connection: close 主动断连;用于防止单客户端长期占连、提升复用率与资源公平性,需配合 keepalive_timeout 使用,典型值公网 api 推荐 100~500。

keepalive_requests 是 Nginx 中用于控制单个长连接(keep-alive 连接)最多能处理多少个 HTTP 请求的指令。它不控制连接时长或空闲时间,只限制“请求次数”。超过设定值后,Nginx 会在响应头中添加 Connection: close,主动关闭该 TCP 连接。
作用与适用场景
该参数主要用于:
- 防止单个客户端长期霸占连接,提升连接复用率和服务器资源公平性
- 配合
keepalive_timeout使用,共同管理长连接生命周期 - 缓解某些客户端异常(如不主动断连、重复发请求)导致的连接堆积问题
- 在高并发、低延迟场景下,平衡复用收益与连接老化风险
配置位置与语法
它只能在 http、server 或 location 块中使用,不能在 upstream 中设置:
server {
listen 80;
server_name example.com;
<pre class="brush:php;toolbar:false;">keepalive_timeout 15;
keepalive_requests 100; # 单连接最多处理 100 个请求
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection '';
}}
注意:proxy_set_header Connection '' 是关键——它清空客户端传来的 Connection 头,避免上游服务误判连接状态;同时启用 proxy_http_version 1.1 才能真正复用连接。
实际效果与验证方法
当连接累计请求达到设定值后,Nginx 会在第 n+1 次响应中返回 Connection: close,客户端收到后会断开并新建连接。
验证方式:
- 用
curl -v发起多个请求,观察响应头中的Connection字段变化 - 用
tcpdump或 Wireshark 抓包,检查 FIN 包是否在预期请求数后出现 - 查看 Nginx access log,结合
$connection_requests变量(需自定义 log_format)统计每连接请求数
常见误区与调优建议
不要盲目设为极大值(如 10000+)或极小值(如 1~5):
- 设太小(如 10):频繁建连,增加 TLS 握手/队列延迟,抵消 keepalive 优势
- 设太大(如 10000):可能让个别慢连接长期占用 worker 进程资源,影响整体吞吐
- 典型值参考:内网服务可设 1000,公网 API 服务建议 100~500,静态资源服务可稍高
- 需结合
keepalive_timeout综合调整——例如 timeout=30s + requests=200,意味着平均每秒请求 ≤6~7 时连接才可能自然超时关闭











