nginx客户端长连接由keepalive_timeout和keepalive_requests协同控制:前者设空闲超时(如30s),后者设单连接最大请求数(如1000),任一条件先触发即断连,形成双杀机制以避免连接长期驻留、缓解热点倾斜。

在 Nginx 配置文件中设置客户端长连接(Keep-Alive)的超时时间和最大请求数,主要靠两个核心指令:keepalive_timeout 和 keepalive_requests。它们必须配合使用,才能真正控制连接的“绝对生命周期”。
keepalive_timeout:控制空闲超时
它定义客户端连接在**无任何请求到达**的情况下,保持打开的最长时间。一旦超时,Nginx 主动关闭该连接,释放文件描述符和内存资源。
- 语法:
keepalive_timeout timeout [header_timeout]; - 第一个参数是服务端实际生效的空闲超时时间(单位秒,也可写
30s、1m) - 第二个参数可选,用于在响应头中添加
Keep-Alive: timeout=N,供部分浏览器参考(如 Firefox、Konqueror;IE/Edge 实际忽略此值,通常约 60–65 秒自行断连) - 常见合理值:20–60 秒。API 网关建议 20–30 秒,静态资源或低频页面可设为 45–60 秒
- 示例:
keepalive_timeout 30s 30s;
keepalive_requests:控制单连接最大请求数
它限制一个 Keep-Alive 连接上最多能处理多少个 HTTP 请求。达到上限后,Nginx 在响应完当前请求后立即关闭连接。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 语法:
keepalive_requests number; - 默认值是
100,对现代高并发场景偏保守 - 推荐值:500–1000。React/Vue 单页应用建议 1000;网关类服务建议 800;若后端存在连接池复用瓶颈,可适当调低
- 示例:
keepalive_requests 1000;
二者协同生效:谁先到,谁断连
这两个参数不是独立起作用,而是构成“双杀机制”——连接生命周期由两者中**先触发的条件**决定:
- 一个连接在 10 秒内已处理 1000 次请求 → 到达
keepalive_requests上限,立刻断开 - 一个连接空闲了 30 秒,但只处理了 2 次请求 → 触发
keepalive_timeout,立刻断开 - 这种设计能有效防止连接长期驻留,缓解 worker 进程和 upstream 节点的热点倾斜
配置位置与注意事项
这两个指令可放在 http、server 或 location 块中,优先级从高到低。生产环境建议统一在 http 块设置基础值,再按需在特定 server 中覆盖。
- 避免设为
0(即keepalive_timeout 0;),这会完全禁用 Keep-Alive - 不要混淆
keepalive_timeout(客户端连接)与upstream keepalive(后端连接),后者需在upstream块中单独配置 - 启用 Keep-Alive 前,确保
proxy_http_version 1.1;和proxy_set_header Connection "";已正确配置(反向代理场景)










