nginx指令:keepalive_timeout作用域

keepalive_timeout 指令在 Nginx 中遵循标准的“作用域继承与覆盖”规则。


1. 作用域 (Context)

keepalive_timeout 可以配置在以下三个作用域中:

  • http
  • server
  • location

2. 覆盖逻辑

Nginx 的配置生效原则是就近原则(更具体的作用域优先):

  1. 优先顺序location > server > http
  2. 如果你在 http 块中设置了全局的 keepalive_timeout 65;,但在某个 server 块中单独配置了 keepalive_timeout 35;,那么请求匹配到该 server 时,超时时间会以 35 秒为准

3. 配置示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
http {
# 全局默认:保持连接 65 秒
keepalive_timeout 65;

# 站点 A:继承 http 块的配置 (65秒)
server {
listen 80;
server_name site-a.com;
}

# 站点 B:覆盖全局配置,设为 35 秒
server {
listen 80;
server_name site-b.com;

# 覆盖 http 层的设置
keepalive_timeout 35;

# 甚至还可以在特定的 location 里再次覆盖
location /api/ {
keepalive_timeout 10; # 仅针对 /api/ 覆盖为 10 秒
}
}
}


4. 补充说明

  • 双参数写法keepalive_timeout 35 30;
  • 第一个参数(35):Nginx 服务器端关闭闲置长连接的超时时间。
  • 第二个参数(30,可选):写进响应头 Keep-Alive: timeout=30 发送给浏览器,提示客户端保持连接的时间。该参数同样支持在 server 层覆盖。