proxy_next_upstream_tries 表示最多向 N 个不同 upstream server 发起请求(含首次),非单节点重试次数;默认 0 为不限,设为 3 是生产常用安全起点,需与 proxy_next_upstream_timeout 配对使用。

proxy_next_upstream_tries 是 Nginx 中用于控制当上游(upstream)服务器返回错误或超时时,Nginx 最多尝试多少个后端节点(包括首次请求)的指令。它不控制单个后端的重试次数,而是限制整个 upstream 块中最多尝试几个 server 实例。
核心作用与生效前提
该指令只在 proxy_next_upstream 启用对应条件时才起作用。例如:当配置了 proxy_next_upstream error timeout http_500;,且某次请求遇到这些情况之一,Nginx 才会尝试下一个 upstream server —— 此时 proxy_next_upstream_tries 开始计数。
- 默认值为 0,表示不限制尝试次数(受限于 upstream 中 server 数量)
- 设为 1 表示仅发起一次请求,不重试任何其他后端
- 设为 N(N ≥ 1),表示最多尝试 N 个 upstream server(含第一个),达到即返回最终响应
典型配置示例
在 location 或 upstream 上下文中设置:
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
<p>server {
location / {
proxy_pass <a href="https://www.php.cn/link/65b5b8d1f89bf53a5713bc3afdd83e9e">https://www.php.cn/link/65b5b8d1f89bf53a5713bc3afdd83e9e</a>;
proxy_next_upstream error timeout http_500 http_502 http_503;
proxy_next_upstream_tries 2; # 最多试 2 台机器
proxy_next_upstream_timeout 3s; # 整体重试总超时(可选但建议配)
}
}</p>
说明:若第一台返回 502,Nginx 会立即换第二台;若第二台也超时,则直接返回 502 给客户端,不再尝试第三台。
注意关键细节
- 不是“每个后端重试 N 次”:它限制的是“换多少个不同后端”,不是对同一台重发几次
- 和 proxy_next_upstream_timeout 配合使用更可靠:后者限制整次重试过程的总耗时,避免因慢节点拖长整体延迟
- 不适用于 keepalive 连接失败的重试逻辑:连接复用场景下,部分错误可能绕过该机制,需结合健康检查(health_check)降低故障节点权重
-
数值包含首次请求:
tries 2= 首次 + 最多再换 1 台
调试与验证方法
开启 Nginx 错误日志(error_log level 至 least info)可观察重试行为:
- 日志中出现
upstream timed out或upstream prematurely closed connection等提示,接着出现trying next upstream,说明触发了重试 - 若看到
no live upstreams while connecting to upstream,可能是所有候选 server 都被标记为不可用,或 tries 已用尽
配合 proxy_set_header X-Forwarded-For $remote_addr; 和后端日志,也能辅助确认是否发生了跨节点请求。











