Nginx长连接需配置keepalive_timeout和keepalive_requests两个参数:前者设空闲超时时间(如30秒),后者限单连接请求数(默认100);二者须置于http或server块,且需协同调整client_timeout等关联参数并重载生效。

在 Nginx 配置文件中设置长连接,核心是控制客户端与 Nginx 之间 HTTP/1.1 Keep-Alive 连接的空闲时长和单次连接可处理的请求数量。这两个参数必须配在 http 或 server 块中,不能写在 location 里。
keepalive_timeout:设置连接空闲超时时间
它定义客户端连接建立后,若无新请求到达,Nginx 保持该连接打开的最长时间。超过这个时间,连接会被主动关闭。
- 语法:keepalive_timeout timeout [header_timeout];
- 第一个值(必填)是服务端实际等待空闲连接的秒数,例如 keepalive_timeout 30; 表示空闲 30 秒即断开
- 第二个值(可选)是发给客户端的响应头中
Keep-Alive: timeout=XX的显示值,不影响实际行为,仅作提示 - 高并发 API 服务建议设为 15–30 秒;普通 Web 站点或兼容性优先场景可设 60 秒
- 注意:该值应大于
client_body_timeout,否则大文件上传中途可能被误关连接
keepalive_requests:限制单次长连接的最大请求数
它控制一个 Keep-Alive 连接在其生命周期内最多能处理多少个 HTTP 请求。达到上限后,Nginx 会在响应头中添加 Connection: close,主动关闭连接。
- 语法:keepalive_requests number;,例如 keepalive_requests 100;
- 默认值是 100,对大多数业务足够合理
- 若后端存在连接泄漏风险(如某些老旧 CGI 或未正确复用 DB 连接),可适当调低(如 30–50)来加快连接回收
- 不建议设为 0 或过小(如 1),否则失去长连接意义,反而增加 TCP 握手开销
配套注意事项
只配这两个参数还不够,需同步检查关联项:
-
client_header_timeout 和 client_body_timeout 应小于
keepalive_timeout,避免请求尚未发完连接就被回收 - 浏览器实际支持的 Keep-Alive 时间通常不超过 60 秒,设太高无实际效果
- 若启用了反向代理,还需单独配置 upstream 的长连接(
upstream { keepalive 32; }),这和客户端侧的keepalive_timeout是两套机制,不可混淆 - 修改后务必执行
nginx -t检查语法,再nginx -s reload生效











