设为3是最优重试次数,配合6–10秒超时与健康检查可有效防雪崩;proxy_next_upstream_tries=3表示最多总尝试3次(含首次),非额外重试2次;必须绑定timeout协同控制总耗时,并依赖健康检查实现故障节点剔除。

直接设为 3,再配上 proxy_next_upstream_timeout 6–10 秒,并启用健康检查——这是防雪崩最有效的组合。单纯调大重试次数反而会把压力反复砸向故障节点,引发“重试风暴”。
明确重试总次数,不是额外重试几次
proxy_next_upstream_tries 是单次请求的**总转发上限**,包含首次请求。设为 3 表示最多尝试 3 次(1 次原发 + 最多 2 次重试),不是“失败后再重试 3 次”。
- 设为 1:等同于禁用重试,适合订单提交、支付回调等非幂等操作
- 设为 3:覆盖瞬时网络抖动或单点短暂不可用,兼顾容错与安全
- 避免设为 0(不限制)或 ≥5:尤其 upstream 节点少于 3 台时,极易重复打同一台机器
必须绑定总耗时窗口,堵住长尾等待
proxy_next_upstream_timeout 是从第一次发起请求开始计时的**整体时间上限**,不是单次超时。它和 tries 必须协同:
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
- 若单次合理响应在 3–5 秒,建议 timeout 设为 6–10 秒(如
proxy_next_upstream_timeout 8s;) - timeout 过大(如 30s)+ tries=5 → 前两次各卡 12 秒,第三次根本没机会执行
- timeout 过小(如 2s)+ tries=3 → 首次就可能超时返回,重试形同虚设
重试目标不固定,靠健康检查剔除坏节点
Nginx 每次重试是**随机选一个当前未被标记为不可用的 upstream 节点**,不是轮询切换。没有健康检查,重试大概率仍打向同一故障机:
- 启用主动健康检查:
health_check interval=3 fails=2 passes=2; - 配合
max_fails=2 fail_timeout=30s实现被动摘除 - 避免 health_check 间隔 >10s 或 fails ≥5,否则宕机节点会长期滞留
按请求语义决定是否允许重试
不是所有失败都该重试。重试本质是风险放大器,尤其对高负载接口:
- GET 类查询可谨慎开启重试(
proxy_next_upstream error timeout http_502 http_503 http_504;) - POST/PUT/DELETE 默认不重试,强行加
non_idempotent需上游 100% 幂等,否则可能扣两笔款、发两次货 - 若发现重试后错误率上升、延迟翻倍,应优先降低 tries 或关闭特定状态码重试










