最少连接策略(least_conn)是“谁闲谁接活”,即实时将新请求分发给当前活跃连接数最少的后端节点,适用于性能不均、响应差异大或长连接场景。
最少连接策略(least_conn)在 Nginx 中不是“平均分发”,而是“谁闲谁接活”——它实时统计每个后端服务器当前的活跃连接数,把新请求交给连接数最少的那个节点。这种动态响应真实负载的方式,特别适合后端性能不均、响应时间差异大或长连接场景,能有效防止个别节点堆积连接、超时增多、响应变慢等问题。
轮询(round-robin)假设每个请求耗时相近,一旦出现以下情况,least_conn 就更可靠:
只需在 upstream 块中声明 least_conn,无需额外参数:
upstream backend { least_conn; server 192.168.1.10:8080; server 192.168.1.11:8080 weight=2; server 192.168.1.12:8080 max_fails=3 fail_timeout=30s;}
注意:least_conn 本身不按 weight 分配,但 weight 仍生效——它只影响初始连接建立时的概率倾向;真正决策依据仍是实时连接数。健康检查参数(如 max_fails 和 fail_timeout)照常起作用。
若不启用连接复用,每次请求都新建 TCP 连接,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;'>}
}
这样 Nginx 会复用后端空闲连接,降低握手开销,也让连接数统计更稳定、更贴近真实负载压力。
启用 stub_status 模块可查看各 upstream server 的实时连接状态:
location /nginx_status { stub_status; }
Active connections 及各 upstream 节点的连接分布