keepalive_time用于限制单个KeepAlive连接的总存活时长,从建立开始计时,超时即关闭;它与keepalive_timeout独立共存,分别控制总时长和空闲超时。

在 Nginx 1.19.10 及更高版本中,keepalive_time 指令可用于直接限制单个 HTTP/1.1 长连接的最大存活时长(单位:秒),超时后连接会被主动关闭。这比仅依赖 keepalive_timeout(控制空闲超时)更精细,能有效防止连接长期占用 worker 进程资源。
keepalive_time 的作用与适用场景
该指令设定的是“从连接建立开始”的总存活上限,无论期间是否有请求、是否活跃。适用于以下情况:
- 防止客户端异常保持连接不释放(如移动端后台进程、调试工具未断连)
- 配合服务端滚动更新或优雅重启,避免旧连接持续存在数小时
- 在高并发下控制连接生命周期,提升连接复用率与资源周转效率
基本配置语法与位置
keepalive_time 必须放在 http 或 server 块中,不能在 location 中使用。示例:
http {
keepalive_time 60m; # 所有 server 默认最长存活 60 分钟
server {
listen 443 ssl;
server_name example.com;
keepalive_time 30m; # 覆盖 http 级别,该 server 最长 30 分钟
...
}
}注意:keepalive_time 不影响连接空闲超时逻辑,keepalive_timeout 仍生效——即连接会在「空闲超过 keepalive_timeout」或「总存活超过 keepalive_time」任一条件满足时关闭。
与 keepalive_timeout 的协同关系
两者是独立但共存的机制,Nginx 会同时检查:
- 若连接空闲时间 ≥
keepalive_timeout→ 立即关闭(常见于无请求的长连接) - 若连接已存在时间 ≥
keepalive_time→ 立即关闭(即使刚处理完一个请求) - 实际连接寿命 = min(keepalive_time, 上次请求后等待时间 + keepalive_timeout)
例如:keepalive_time 10m + keepalive_timeout 5s,则:即使每秒都有请求,连接也最多活 10 分钟;若某次请求后停顿 6 秒,连接会在第 6 秒关闭(由 keepalive_timeout 触发)。
验证与调试建议
启用后可通过以下方式确认效果:
- 用
curl -v --http1.1 http://host/观察响应头是否含Connection: keep-alive,再复用同一 TCP 连接发多次请求 - 结合
nginx -t && nginx -s reload生效后,用ss -tnp | grep :80查看连接的timer字段(如on 00:00:29表示距超时还剩 29 秒) - 开启
error_log /path/to/log notice;,连接因keepalive_time超时关闭时,日志中会出现"client timed out (110: Connection timed out) while keepalive"类提示(注意:实际提示文本可能略有差异,以 Nginx 编译版本为准)
不复杂但容易忽略:该指令仅对启用了 keepalive 的连接生效(即客户端发送 Connection: keep-alive 且服务端返回相同头),HTTP/2 连接不受影响(其生命周期由 SETTINGS 帧和 PING 机制管理)。



















