在 Nginx 中启用 least_conn 负载均衡策略需在 upstream 块中添加 least_conn 指令,使请求优先转发至当前活跃连接数最少的后端服务器,适用于长连接或响应时间差异大的场景。

在 Nginx 中启用 least_conn 负载均衡策略,只需在 upstream 块中添加该指令即可。它会让 Nginx 优先把新请求转发给当前活跃连接数最少的后端服务器,适合处理长连接或响应时间差异较大的场景(比如 WebSocket、文件上传、慢查询接口)。
配置 least_conn 的基本写法
在 Nginx 配置文件(如 /etc/nginx/nginx.conf 或站点配置中)定义 upstream 时,直接使用 least_conn 作为调度算法:
upstream backend {
least_conn;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}然后在 server 块中通过 proxy_pass https://www.php.cn/link/65b5b8d1f89bf53a5713bc3afdd83e9e; 引用即可。
least_conn 的工作逻辑和注意事项
该策略不是实时统计 TCP 连接数,而是由 Nginx 主动维护每个后端的“当前活跃连接计数”,统计范围包括:
– 正在 proxy_pass 转发中的请求
– 正在读取后端响应的连接
– 保持长连接但尚未关闭的空闲连接(如 HTTP/1.1 keepalive)
- 不考虑后端真实负载(CPU、内存)、响应延迟或健康状态,仅看连接数
- 如果多个后端连接数相同,Nginx 按配置顺序选择第一个(非轮询)
- 需配合
keepalive指令合理设置长连接池,避免连接数虚高 - 不兼容健康检查自动剔除——要加
max_fails和fail_timeout才能实现故障转移
搭配 keepalive 提升效果
当后端支持长连接时,建议为 upstream 显式开启连接复用,减少连接建立开销,也让 least_conn 统计更稳定:
upstream backend {
least_conn;
keepalive 32; # 每个工作进程最多缓存 32 个空闲连接
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
<p>server {
location / {
proxy_pass <a href="https://www.php.cn/link/65b5b8d1f89bf53a5713bc3afdd83e9e">https://www.php.cn/link/65b5b8d1f89bf53a5713bc3afdd83e9e</a>;
proxy_http_version 1.1;
proxy_set_header Connection '';</p><h1>其他 proxy_* 配置...</h1><pre class="brush:php;toolbar:false;"><code>}}
验证是否生效
可通过 Nginx 内置状态页(需编译含 --with-http_stub_status_module)观察各 server 的 Active connections 数值变化:
location /nginx_status {
stub_status on;
allow 127.0.0.1;
deny all;
}访问 http://your-nginx/nginx_status,输出中每行末尾的数字即为当前活跃连接数,持续压测时可看到请求明显倾向连接数更低的节点。
不复杂但容易忽略:确保后端服务确实能复用连接,并且 Nginx worker 进程数与后端并发能力匹配,否则连接数统计可能失真。


















