Nginx 开源版原生不支持 random 负载均衡算法,仅内置 round-robin、least_conn、ip_hash 和 hash $key consistent 四种标准算法;推荐用 hash $request_id consistent 模拟随机分发,或通过第三方模块、前置网关实现真随机调度。

Nginx 原生不支持 random(纯随机)负载均衡算法。官方 upstream 模块提供的标准算法只有:
-
round_robin(轮询,默认) -
least_conn(最少连接) -
ip_hash(IP 哈希) -
hash $key consistent(一致性哈希,需显式声明hash指令) -
least_time(仅限商业版 NGINX Plus,非开源版)
✅ 开源版 Nginx(截至 2026 年 7 月)没有内置
random算法,也不存在random;或random on;这类配置指令。
H3 如果你确实需要「随机分发」效果,有以下可行方案:
-
用
hash+ 随机因子模拟(推荐,无需额外模块)
利用$request_id(每个请求唯一)、$msec(毫秒级时间戳)或$connection(连接序号)作为哈希键,使每次请求哈希结果近似随机,且不绑定客户端 IP:upstream backend { hash $request_id consistent; server 192.168.1.101:8080; server 192.168.1.102:8080; server 192.168.1.103:8080; }⚠️ 注意:
consistent是一致性哈希,但配合高熵变量(如$request_id)时,实际分发接近均匀随机;且不会因后端增减导致大量请求重散列(比ip_hash更稳定)。 -
启用第三方模块
nginx-upstream-random(需自行编译)
社区模块 nginx-upstream-random 提供random和random two(随机选两个取健康度最优者)算法:upstream backend { random two; server 192.168.1.101:8080; server 192.168.1.102:8080; server 192.168.1.103:8080; }? 要求:下载源码、打补丁、重新编译 Nginx,不适用于 yum/apt 直接安装的包。
绕过 Nginx,由上游服务层做随机(更灵活)
将 Nginx 配置为简单 DNS 轮询或单点代理,把随机逻辑下沉到应用网关(如 Spring Cloud Gateway、Envoy)或业务代码中,适合微服务架构。
H3 为什么官方不提供 random?
- 随机算法无法保证连接数/响应时间均衡,可能加剧负载倾斜;
- 在无状态短连接场景下,轮询或加权轮询已足够;
- 真正需要“去相关性”的场景(如压测分流),通常用
hash $request_id或hash $msec更可控、可复现。
H3 实用建议
- 多数生产环境不需要纯随机,
least_conn更适合长连接,weight+round_robin更适合异构集群; - 若仅为打破轮询顺序感,
hash $request_id consistent是零依赖、开箱即用的替代方案; - 不要误信网上所谓
random on;或random true;配置——它们在标准 Nginx 中会直接报错unknown directive。
不复杂但容易忽略:随机 ≠ 均匀,而负载均衡的核心目标是均衡,不是“看起来随机”。


















