全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-20 7 分钟 ✍️ juanwangdev

连接超时与keepalive优化

合理的超时设置可防止慢连接占用资源,keepalive 可减少 TCP 握手开销。两者配合使用可显著提升性能。

客户端连接超时

基本超时配置

nginx
http {
    # 客户端连接超时
    keepalive_timeout 65 15;
    
    # 请求体读取超时
    client_body_timeout 12;
    
    # 响应头发送超时
    client_header_timeout 12;
    
    # 响应发送超时
    send_timeout 10;
}

keepalive_timeout 两个参数:第一个是 keepalive 持续时间,第二个是响应头中的 Keep-Alive: timeout= 值。第二个为 0 时不发送该头。

keepalive 优化

客户端 keepalive

nginx
http {
    keepalive_timeout 65;
    keepalive_requests 100;
}
  • keepalive_timeout 65 — 连接保持空闲的时间
  • keepalive_requests 100 — 单个 keepalive 连接可处理的最大请求数

达到 keepalive_requests 后连接关闭,客户端需重新建立 TCP 连接。设置过低增加握手开销,过高可能导致连接不均。

上游服务器 keepalive

nginx
upstream backend {
    server 10.0.0.1:8080;
    server 10.0.0.2:8080;
    
    keepalive 32;
    keepalive_timeout 60;
    keepalive_requests 100;
}

server {
    location /api/ {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

反向代理场景必须设置 proxy_http_version 1.1proxy_set_header Connection "",否则 keepalive 不生效。keepalive 32 是空闲连接数上限,不是总连接数。

超时配置策略

不同场景不同策略

nginx
server {
    # 普通请求 - 标准超时
    keepalive_timeout 65;
    client_body_timeout 12;
    client_header_timeout 12;
    
    # 大文件上传 - 放宽超时
    location /upload/ {
        client_body_timeout 300;
        client_max_body_size 100m;
    }
    
    # WebSocket - 长连接
    location /ws/ {
        proxy_read_timeout 86400;
        proxy_send_timeout 86400;
    }
    
    # API 网关 - 快速失败
    location /api/ {
        client_body_timeout 5;
        proxy_read_timeout 10;
        send_timeout 5;
    }
}

上游连接优化

完整反向代理超时

nginx
location /api/ {
    proxy_pass http://backend;
    
    # 连接到上游的超时
    proxy_connect_timeout 5s;
    
    # 等待上游响应的超时
    proxy_read_timeout 30s;
    
    # 发送请求到上游的超时
    proxy_send_timeout 10s;
}

proxy_connect_timeout 仅指 TCP 握手时间,不包括发送数据时间。API 网关建议设置较短的 connect 超时(5 秒内)。

连接池管理

upstream keepalive 容量

nginx
upstream backend {
    server 10.0.0.1:8080;
    server 10.0.0.2:8080;
    
    # 空闲连接池大小
    keepalive 64;
    
    # 连接空闲超时
    keepalive_timeout 120;
    
    # 每个连接最大请求数
    keepalive_requests 1000;
}

keepalive 值应大于 worker_connections / upstream服务器数。过高浪费文件描述符,过低无法有效复用连接。

要点总结

  • keepalive_timeout 控制空闲连接保持时间,推荐 60-75 秒
  • keepalive_requests 限制单连接处理请求数,防止连接老化
  • 反向代理必须设置 proxy_http_version 1.1 + Connection ""
  • upstream keepalive 是空闲连接池大小,不是总连接数
  • 不同场景使用不同超时策略(上传/WebSocket/API)
  • 上游 connect 超时应短(5 秒),快速失败便于负载均衡

📝 发现内容有误?点击此处直接编辑

← 上一篇 负载均衡算法调优
下一篇 → HTTPS与SSL/TLS配置
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库