连接超时与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.1和proxy_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 秒),快速失败便于负载均衡
📝 发现内容有误?点击此处直接编辑