Nginx keepalive:超时时间与请求数设置
理解 Nginx keepalive 的两个核心参数
Nginx 的 keepalive 机制主要依赖 keepalive_timeout 与 keepalive_requests 两个指令协同工作,二者分别作用于 TCP 连接生命周期的不同阶段,且均针对客户端到 Nginx 的前端连接。keepalive_timeout 定义了服务器在最后一次请求处理完毕后,保持空闲连接打开的最大等待时间。例如设置为 65s,表示若客户端在 65 秒内未发起新请求,Nginx 将主动关闭该连接以释放文件描述符。需特别注意,该参数并非请求处理超时,而是连接空闲超时,与 proxy_read_timeout 或 client_body_timeout 有本质区别。keepalive_requests 则限制单个长连接上允许处理的最大请求数量。当累计请求数达到设定值时,Nginx 会在响应头中附加 Connection: close 并关闭连接,防止单一连接长期占用内存或引发潜在的资源泄漏。两者共同决定了 HTTP 长连接复用的边界:超时控制时间维度,请求数控制数量维度,合理搭配才能兼顾性能与稳定性。

配置 keepalive 超时时间与请求数
在 nginx.conf 的 http、server 或 location 块中,可通过标准语法进行配置。keepalive_timeout 支持单值或双值写法,如 keepalive_timeout 65s 60s;,前者为服务端保持时间,后者为响应头中告知客户端的超时值。keepalive_requests 语法为 keepalive_requests 1000;,仅接受正整数。Nginx 官方默认值分别为 75 秒和 1000 次请求,但实际部署绝不应盲目照搬。配置思路需结合业务特征:对于高频短请求的 API 网关,可适当调高 keepalive_requests 至 2000~5000,并维持 30~60 秒的超时,以降低 TCP 三次握手开销;对于静态资源服务或低频后台接口,建议将超时缩短至 15~30 秒,请求数设为 100~500,避免空闲连接堆积消耗系统文件描述符。修改时务必在对应作用域内声明,若需全局生效则置于 http 块,若仅针对特定虚拟主机则置于 server 块。调整后应结合压测观察连接复用率与内存占用,动态寻找最优平衡点。

验证配置是否生效
配置修改完成后,首先执行 nginx -t 检查语法正确性,终端输出 syntax is ok 与 test is successful 后方可继续。随后运行 nginx -s reload 实现平滑重载,该操作不会中断现有连接,仅对新连接应用新配置。验证生效需从服务端与客户端双视角切入:服务端可通过 ss -tnp | grep nginx 观察 ESTABLISHED 状态连接是否按预期保持;客户端可使用 curl -v http://your-domain 连续发起请求,若响应头出现 Keep-Alive: timeout=65, max=1000 且底层 TCP 连接未断开,则说明复用成功。在浏览器开发者工具的 Network 面板中,勾选 Disable cache 后刷新页面,查看同一域名下多个资源的 Connection ID 是否一致,即可直观判断长连接是否被复用。需注意,配置生效仅代表 Nginx 具备保持连接的能力,实际复用还取决于客户端 HTTP 库的实现策略,若客户端主动发送 Connection: close 或自身连接池已满,Nginx 仍会按指令关闭连接。

常见误区与参数调优
实践中极易将 keepalive_timeout 与 proxy_read_timeout 混淆,前者仅管控客户端至 Nginx 的连接,后者负责 Nginx 至后端的代理读取超时,二者作用域完全不同。若需复用 Nginx 到上游服务的连接,必须在 upstream 块中单独配置 keepalive 指令,而非依赖前端参数。典型问题包括:超时设置过大导致 ESTABLISHED 连接数激增,耗尽系统 ulimit -n 限制;请求数阈值过高引发部分客户端内存泄漏或连接独占;阈值过低则造成频繁 TCP 握手,增加 CPU 与网络延迟。排查时应优先启用 stub_status 模块监控 Active connections 与 Reading/Writing/Waiting 指标,结合 netstat 命令统计连接状态分布。若发现大量 TIME_WAIT,说明连接关闭过于频繁,可适当调高超时;若 ESTABLISHED 居高不下且伴随内存增长,应降低 keepalive_requests 并检查客户端连接池配置。调优本质是权衡握手成本与连接维护开销,需以实际监控数据为基准,避免凭经验盲目放大参数。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









