Nginx轮询默认重试次数为0,即不重试;启用重试必须显式配置proxy_next_upstream及proxy_next_upstream_tries(如设为3表示最多尝试3次,含首次),并配合upstream多节点、健康检查等参数协同生效。

Nginx 轮询本身不自动重试,所谓“默认重试次数”其实是 0 次——即不重试。要启用重试,必须显式配置 proxy_next_upstream 及相关参数。修改重试次数,核心是调整 proxy_next_upstream_tries。
修改轮询负载均衡的重试次数
-
proxy_next_upstream_tries控制整个请求过程中最多尝试多少次(含首次),它不是“额外重试几次”,而是“总共最多发几次请求” - 默认值为
0,表示不限次数(不推荐,易引发雪崩或超时堆积) - 实际部署中应设为小整数,如
2或3
你需要在 location 块或 server 块中添加或修改该指令:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
location / {
proxy_pass http://backend;
proxy_next_upstream error timeout http_502 http_503 http_504;
proxy_next_upstream_tries 3; # 关键:最多发起 3 次请求(首次 + 最多再试 2 台)
}配合重试生效的必要条件
-
proxy_next_upstream必须显式开启,且指定触发条件
例如error timeout http_502,否则即使超时也不会换节点 - upstream 中至少要有 2 台可用 server,否则“重试”无意义
- 单次超时参数(如
proxy_connect_timeout)不能大于proxy_next_upstream_timeout,否则后续重试发不出去 - 推荐同步配置健康检查,避免反复试探已宕机节点:
- 在 upstream 的 server 行后加
max_fails=2 fail_timeout=30s
- 在 upstream 的 server 行后加
常见错误配置
- 忘记写
proxy_next_upstream,只改tries—— 重试不会触发 - 设
proxy_next_upstream_tries 1—— 等同于不重试(只允许发一次) - 加了
http_404或http_500—— 可能掩盖业务问题,不建议用于重试 - 开启
non_idempotent—— 导致 POST 请求被重复发送,有严重副作用
重试逻辑依赖整体协同,单独调一个参数无法生效。

















