least_conn必须置于upstream块首行,不支持参数及与其他策略共存;需搭配max_fails/fail_timeout、max_conns、keepalive和HTTP/1.1长连接配置才能真实反映负载并生效。

直接在 upstream 块开头写 least_conn;,这是唯一且必须的位置。它不接受参数,也不能和其他负载均衡策略共存。
基础配置结构
least_conn 必须作为 upstream 块内的第一条指令,紧接在 upstream 名称之后:
- 正确写法:
upstream api_backend {
least_conn;
server 192.168.1.10:8000;
server 192.168.1.11:8000;
} - 错误写法:
— 放在http、server或location块里 → Nginx 启动报错 “directive is not allowed here”
— 写在server行后面 → 被忽略或触发配置校验失败
— 和ip_hash、hash、least_time同时出现 → 配置无法通过
必须搭配的 server 属性
单独一行 least_conn; 不足以让算法稳定生效。每个 server 至少要配三项关键属性:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- max_fails=2 fail_timeout=15s:启用被动健康检查,异常节点快速剔除,避免调度到“假空闲”机器
- max_conns=800(举例):代替 weight 实现容量感知,连接数达到即跳过,防止高负载节点继续收请求
- slow_start=30s(新节点建议加):冷启动时流量线性接入,防雪崩
例如:
server 192.168.1.10:8000 max_fails=2 fail_timeout=15s max_conns=2000 slow_start=30s;
必须启用的连接复用支持
least_conn 统计的是活跃 TCP 连接数,若后端总是短连接,连接数瞬时归零,算法就退化为随机分配:
- 在
upstream块中加:keepalive 32;(每 worker 最多缓存 32 条空闲连接) - 在
location中加:proxy_http_version 1.1;和proxy_set_header Connection ''; - 后端服务需支持长连接(如 FastAPI/Uvicorn 开启 keep-alive,Tomcat 设置
maxKeepAliveRequests > 0)
验证是否真正起效
别只看配置语法是否通过,重点观察行为是否符合预期:
- 开启
stub_status,访问/nginx_status查看各后端Active connections是否随压测趋于均衡 - 用
curl -I或日志确认请求确实落在连接数更少的节点上 - 监控响应时间 P95 和连接堆积趋势——若某节点连接数低但延迟飙升,说明健康检查没跟上,需加强主动探测

















