proxy_next_upstream_tries设为3表示单次请求最多转发3次(含首次),非失败后重试3次;必须配合proxy_next_upstream、proxy_next_upstream_timeout及健康检查协同生效,单独设置无效。

proxy_next_upstream_tries 是 Nginx 控制单次请求最多转发给几个 upstream 节点的总次数(含首次),不是“失败后再重试几次”。设为 3,就是最多发 3 次请求,第一次 + 最多再换 2 台机器。
基本配置写法
必须放在 location 或 server 块中,且仅在启用 proxy_next_upstream 并存在多个 upstream 节点时生效:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 先定义 upstream 块,至少包含两台服务器
- 在 location 中配置
proxy_pass指向该 upstream - 明确设置
proxy_next_upstream,指定哪些错误触发重试(如error timeout http_502 http_503 http_504) - 加上
proxy_next_upstream_tries N,N 为整数(常用值为 1、3)
示例:
location /api/ {proxy_pass http://backend;
proxy_next_upstream error timeout http_502 http_503 http_504;
proxy_next_upstream_tries 3;
}
关键数值含义与选择
-
proxy_next_upstream_tries 1:只发一次请求,不重试。适合订单创建、支付回调等非幂等操作 -
proxy_next_upstream_tries 3:首次 + 最多再试 2 次,覆盖网络抖动或单点瞬时故障,是生产环境最常用的安全值 -
proxy_next_upstream_tries 0或 ≥5:默认无限重试,节点少于 3 台时极易反复打同一台故障机,易引发雪崩
必须配合的参数
单独设 tries 几乎无效,需三者协同:
-
proxy_next_upstream_timeout:从第一次请求发出开始计时的总耗时上限。例如单次合理响应约 4 秒,设
tries 3,建议timeout 10s。只控次数不管时间,等于放任慢节点拖垮整体 -
proxy_next_upstream:必须显式声明触发条件,如
error timeout http_502 http_503 http_504。不加这行,tries完全不生效 -
健康检查机制:通过
max_fails=2 fail_timeout=30s(被动)或health_check(NGINX Plus)主动剔除异常节点,避免重试仍落到坏机器上
常见误区提醒
- 误以为
tries 3是“失败后重试 3 次”——实际是总共最多 3 次(含首次) - 忽略
proxy_next_upstream的前提,导致配置了tries却无重试行为 - 对所有 5xx 都开启重试,比如盲目加
http_500;若后端因业务逻辑异常返回 500,重试大概率重复失败 - 未配超时就设高
tries,比如tries 5+proxy_read_timeout 15s,用户可能干等近一分钟才收到错误










