nginx upstream 默认启用轮询机制,只需在块中列出两个及以上不带weight、ip_hash等参数的server指令;每台权重为1,请求严格顺序循环分发,并可选配max_fails和fail_timeout实现被动健康检查。

直接在 upstream 块里列出后端服务器地址,不加任何算法指令、不设权重、不写健康参数(或仅保留基础参数),Nginx 就会自动启用默认轮询机制。
配置写法:只列 server,不加额外关键字
轮询是 Nginx upstream 的原生默认行为,不需要声明 round_robin,也不支持显式写这个关键字——写了反而报错。只要满足以下条件,轮询就生效:
- upstream 块中至少有两个
server指令 - 每个
server行不包含weight、ip_hash、least_conn、hash等调度相关参数 - upstream 块开头不写任何算法指令(如
ip_hash;必须整行删除,不能只注释)
标准示例配置
以下是最简可用的轮询配置:
upstream backend {
server 10.0.1.5:8080;
server 10.0.1.6:8080;
server 10.0.1.7:8080;
}
每台服务器默认权重为 1,请求严格按顺序循环分发:第 1 次 → 10.0.1.5,第 2 次 → 10.0.1.6,第 3 次 → 10.0.1.7,第 4 次 → 回到 10.0.1.5……
建议补充健康探测参数
默认轮询本身不主动检查后端状态,但可配合被动健康检查提升稳定性:
- 加上
max_fails=2 fail_timeout=15s,让 Nginx 在连续失败 2 次后,15 秒内跳过该节点 - 例如:
server 10.0.1.5:8080 max_fails=2 fail_timeout=15s; - 这样既保持轮询逻辑不变,又能自动剔除临时不可用节点,避免请求堆积
验证是否真正在轮询
最可靠的方式是查看 access log 中的上游地址:
- 在 http 或 server 块中定义日志格式:
log_format main '$remote_addr - $upstream_addr - $time_local "$request"'; - 重启 Nginx,发起多个请求(如用
curl循环 6 次) - 检查日志中
$upstream_addr是否按配置顺序交替出现











