Nginx高并发超时优化需分级控制:客户端keepalive_timeout设5~30秒、proxy_*_timeout须小于后端超时并留2~3秒余量,启用upstream keepalive与HTTP/1.1复用,并配合系统参数调优。

高并发下 Nginx 代理超时配置不合理,容易导致连接堆积、文件句柄耗尽、后端阻塞或频繁 502/504 错误。优化核心不是一味延长或缩短时间,而是按角色分级控制、主动回收、避免空转。
客户端连接超时要“快收快放”
空闲连接不及时关闭,会持续占用 worker 进程、内存和文件描述符:
- keepalive_timeout 设为 5~30 秒(高并发网关建议 ≤10 秒),第二参数(响应头中的 Keep-Alive: timeout=)比第一参数小 1~5 秒,确保客户端同步感知
- keepalive_requests 设为 500~2000,达到后强制断开,防止单连接长期霸占资源
- client_header_timeout 和 client_body_timeout 均设为 8~15 秒,防范慢速攻击或弱网卡顿请求
- send_timeout 控制响应发送阶段,设为 10~20 秒,避免后端延迟拖住整个连接
后端代理超时必须“链路对齐”
前后端超时不匹配是 502/504 的主因。Nginx 等待后端的时间,不能超过后端自身处理上限,也不能远小于它:
- proxy_connect_timeout:5 秒以内,仅用于建连,超时即换节点
- proxy_send_timeout:10~20 秒,适用于常规 API;文件上传类可放宽至 60 秒以上
- proxy_read_timeout:15~30 秒为主流值,API 网关建议 ≤20 秒;SSE 或长轮询等特殊场景可单独 location 配置为 300 秒
- 所有 proxy_*_timeout 值需 ≤ 后端服务的 read/write 超时,且留出 2~3 秒缓冲余量
连接复用与上游 Keepalive 要配对启用
只开 client 端 keepalive 不够,上游连接也必须复用,否则每次请求都重建 TCP 到后端:
- upstream 块中加 keepalive 32(每 worker 最多缓存 32 个空闲连接)
- location 中必须设置 proxy_http_version 1.1 和 proxy_set_header Connection ""
- 可选配 keepalive_timeout 60s 和 keepalive_requests 1000 控制上游连接生命周期
系统级配合不可少
Nginx 层超时生效的前提,是操作系统允许它快速释放资源:
- 确保 net.core.somaxconn ≥ 65535,防止 SYN 队列溢出
- 开启 net.ipv4.tcp_tw_reuse = 1,让 TIME_WAIT 连接可被快速重用
- 调高 fs.file-max 和 worker_rlimit_nofile,保证文件句柄充足
- 检查 net.ipv4.tcp_fin_timeout 是否为 30 左右,加快 FIN 状态回收











