nginx高并发短连接优化关键在于系统调优与upstream增强:调高文件句柄、扩大端口范围、加速time_wait回收;启用健康检查、连接复用、合理超时;结合least_conn缓解负载倾斜;压测验证指标。

高并发短连接场景下,Nginx轮询策略本身不“慢”,但默认配置容易导致请求分配不均、后端连接堆积、TIME_WAIT泛滥,最终拖垮整体吞吐。优化重点不在改算法,而在让轮询真正跑得稳、分得准、连得省。
补足系统级基础能力
轮询再公平,也架不住底层卡住:
- 调高文件句柄限制:ulimit -n 65536 并在
/etc/security/limits.conf中持久化,否则单机连不上万连接 - 扩大本地端口范围:
net.ipv4.ip_local_port_range = 1024 65535,避免短连接频繁耗尽可用端口 - 加速 TIME_WAIT 回收:
net.ipv4.tcp_tw_reuse = 1(仅对客户端有效)+net.ipv4.tcp_fin_timeout = 30,减少连接状态堆积
增强 upstream 配置的健壮性
默认轮询只管顺序发,不管后端是否真能接住:
- 为每个 server 加上健康探测:
max_fails=3 fail_timeout=30s,快速隔离响应超时或5xx过多的节点 - 启用连接复用:
proxy_http_version 1.1;+proxy_set_header Connection '';,复用后端长连接,省掉大量三次握手和四次挥手开销 - 设置合理的超时:
proxy_connect_timeout 3s;、proxy_read_timeout 10s;,防止单个慢请求阻塞整个 worker 进程
结合 least_conn 缓解短连接倾斜
纯轮询在短连接下易出现“刚分完一个请求,后端就返回了,连接立刻释放”,造成瞬间负载不均。加一层连接数感知更稳妥:
- 在 upstream 块中显式声明:
least_conn;(开源版原生支持) - 它不替代轮询,而是在多个空闲节点中优先选当前活跃连接最少的那个,对突发流量更友好
- 搭配
weight使用效果更佳,比如高性能机器设weight=3且参与least_conn判定
压测验证关键指标是否改善
优化不是调完就完,要看真实反馈:
- 用
wrk -t4 -c1000 -d30s http://your-domain/模拟短连接压测 - 监控
ss -s | grep "TCP:"中的TIME-WAIT数量,应稳定在几千以内,而非几万 - 检查各后端 access.log 的请求计数,轮询偏差控制在 ±10% 内属正常;若某台长期少 30% 以上,说明健康检查或网络路径异常











