要真正提升负载均衡集群全链路效率,关键在于客户端→nginx→后端服务三段长连接全部稳定复用且行为协同:第一段由keepalive_timeout(45–60s)和keepalive_requests(500–1000)控制;第二段需upstream中配置keepalive 16–64、proxy_http_version 1.1及proxy_set_header connection '';第三段要求后端超时大于nginx设置且禁用connection: close;验证须通过ss命令观察estab连接数稳定、time_wait显著下降及日志确认复用。

轮询负载均衡本身不感知后端连接状态,搭配 keepalive 时若配置失当,容易出现连接堆积、被动回收、复用率低等问题。优化关键不是堆大数值,而是让客户端→Nginx→后端三段连接生命周期协同、行为对齐。
客户端到 Nginx 的 keepalive 控制
这一段决定前端是否愿意复用连接,直接影响 Nginx 入口连接池的稳定性:
- keepalive_timeout 设为 45–60 秒:比后端服务(如 Tomcat 的 75s)略短,避免 Nginx 主动断连而服务仍在等待;过长(如 >75s)会导致空闲连接滞留,挤占 worker_connections 资源
- keepalive_requests 设为 500–1000:尤其适合单页应用或高频 API 场景,防止连接在处理几十个请求后就被关闭,提升复用率
- 无需手动加
Connection: keep-alive响应头,HTTP/1.1 下默认生效;加了反而可能干扰某些客户端逻辑
Nginx 到后端的 upstream 连接池配置
这是最容易配错的核心环节,三要素缺一不可:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- upstream 中显式写 keepalive N(建议 16–64):N 是每个 worker 进程对每台后端服务器维护的空闲连接上限,不是全局总数。例如 4 个 worker + keepalive 32 → 最多缓存 128 条空闲连接
- proxy_http_version 1.1:必须启用,HTTP/1.0 不支持长连接复用
- proxy_set_header Connection "":清空而非设为 close,否则后端收到 Connection: close 就会主动断连,使 keepalive 形同虚设
调度算法与连接生命周期协同
轮询无法反映真实连接压力,容易导致部分后端连接数远高于其他节点:
- 在 upstream 块中加入 least_conn:Nginx 实时统计各后端 ESTABLISHED 连接数,新请求优先发给连接最少的节点,显著降低连接倾斜概率
- 配合 reset_timedout_connection on:对超时空闲连接主动发 RST,加速内核清理 FIN_WAIT2 或 TIME_WAIT 状态,避免僵死连接长期占位
- keepalive_timeout(upstream 级)建议设为 15–30 秒:太长(如 65s+)会让连接卡在 reusable 队列尾部,成为首批被
ngx_drain_connections()清理的对象;太短则建连压力回升
验证是否真正生效
别只看配置,要从系统连接状态判断:
- 在 Nginx 机器执行:
ss -tan | grep :后端端口 | grep ESTAB | wc -l,压测中应稳定在 keepalive 设定值附近(如设 32,观察值在 25–32 波动) - 在后端机器查:
ss -s | grep -i time,TIME_WAIT 数量应明显下降(实测降幅常达 60% 以上) - 检查 Nginx error 日志或开启 debug 日志,确认有
reusing connection类提示,而非反复出现connect to ... failed










