Nginx 官方版本不原生支持 random 负载均衡算法,仅内置 round-robin、weighted round-robin、ip_hash 和 least_conn 四种;推荐使用 Nginx 1.19.5+ 的 hash $remote_addr rand 实现伪随机调度,或用 least_conn + weight 模拟准随机行为。

Nginx 官方版本(截至 1.22.0 及当前主流稳定版)不原生支持 random 负载均衡算法。它默认仅内置四种算法:round-robin(轮询)、weighted round-robin(加权轮询)、ip_hash 和 least_conn。random 算法虽在部分技术文章或社区讨论中被提及,但并非 Nginx 开源版 ngx_http_upstream_module 的标准能力。
不过,你仍可通过以下两种实际可行、生产验证过的方式实现「随机调度」效果,适用于高并发下希望请求无序、低耦合分发的场景:
✅ 方式一:使用 hash $remote_addr rand(Nginx 1.19.5+ 原生支持)
这是最推荐的方案——利用 Nginx 内置的 hash 指令 + rand 参数,实现真正随机选择后端节点。
-
hash $remote_addr rand;表示:对客户端 IP 做哈希,但每次计算时引入随机扰动,使结果近似均匀随机。 - 实际行为是:每个新请求独立、伪随机地从 upstream server 列表中选取一台,不依赖历史或状态。
- 优势:无需编译模块、零依赖、高并发下性能好、天然支持健康检查(配合
max_fails/fail_timeout)。
配置示例:
upstream backend_random {
hash $remote_addr rand;
server 192.168.1.10:8000;
server 192.168.1.11:8000;
server 192.168.1.12:8000;
}⚠️ 注意:
server行中不能混用weight、backup等参数(官方限制),若需权重,请改用least_conn+weight组合近似模拟。
✅ 方式二:用 least_conn + 合理权重模拟“准随机”行为
当无法升级 Nginx 版本(least_conn 是最接近随机的替代方案:
- 它优先选当前活跃连接数最少的节点,高并发短连接场景下(如 API 请求),各节点连接数波动剧烈,调度结果呈现强随机性。
- 配合
weight可调节倾向,避免完全均等导致某节点瞬时堆积。
配置示例:
upstream backend_fair {
least_conn;
server 192.168.1.10:8000 weight=3;
server 192.168.1.11:8000 weight=2;
server 192.168.1.12:8000 weight=1;
}❌ 不建议的方式
-
第三方
random模块(如nginx-upstream-random):维护成本高、兼容性差、缺乏长期安全更新,不推荐用于生产环境。 - DNS 轮询或客户端侧随机:脱离 Nginx 控制,无法做健康检查、超时重试、流量染色等关键治理能力。
高并发下关键增强项(必须配)
无论选哪种方式,都应启用基础容错机制:
-
max_fails=3 fail_timeout=30s:自动剔除连续失败节点 -
proxy_next_upstream error timeout http_500 http_502 http_503 http_504:失败时自动转发至下一节点 -
keepalive 32(在 upstream 内):复用长连接,降低高并发建连开销
不复杂但容易忽略


















