如何利用 proxy_next_upstream http_404 实现多存储节点的容错分发

千萱大大_5143

千萱大大_5143

2026-05-18

419人浏览

原创

proxy_next_upstream http_404 仅适用于多副本静态资源场景,需满足路径一致、内容强一致、只读无状态、请求幂等四前提;全局启用会导致无效重试、健康检查误判和语义混乱,推荐用一致性哈希或CDN回源替代。

如何利用 proxy_next_upstream http_404 实现多存储节点的容错分发

proxy_next_upstream http_404 不能直接用于通用容错,它只在明确业务允许、且 404 是临时/非确定性错误的极少数场景下才可启用——典型就是多副本静态资源存储节点(如对象存储、CDN源站)部署时,某节点缺失特定文件但其他节点存在。

这类场景下,404 不代表业务失败,而是“这个节点没存,换个节点可能就有”。但必须满足三个前提,否则极易引发问题:

Nginx Reverse Proxy
Nginx Reverse Proxy

配置 Nginx 反向代理,实现域名绑定。用户说“绑定域名”“配置 Nginx”“反向代理”时触发,将域名绑定到指定 IP:端口。

下载
  • 文件路径完全一致、内容强一致(如通过预同步或写时广播保证)
  • 所有节点均为只读、无状态存储(不涉及用户会话、计费、写操作)
  • 客户端请求幂等(GET/HEAD,绝不可用于 POST/PUT)

配置要点:仅限静态资源路径,且需严格隔离

upstream static_storage {
    server oss-node-a.example.com:80 max_fails=2 fail_timeout=30s;
    server oss-node-b.example.com:80 max_fails=2 fail_timeout=30s;
    server oss-node-c.example.com:80 backup;
}
location ~* \.(jpg|jpeg|png|gif|webp|pdf|zip|tar\.gz)$ {
    proxy_pass https://static_storage;
    proxy_next_upstream error timeout http_404;  # ✅ 仅此处启用 http_404
    proxy_next_upstream_tries 3;
    proxy_next_upstream_timeout 5s;

    proxy_connect_timeout 3s;
    proxy_read_timeout 5s;
    proxy_send_timeout 3s;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

为什么不能全局加 http_404

  • 大多数 404 是确定性业务结果:路径不存在、路由未配置、API 版本过期。重试只会把请求轮询到另一个同样返回 404 的节点,浪费资源。
  • 混淆健康检查逻辑:max_fails 默认不统计 http_404(除非显式加入 proxy_next_upstream),但一旦加入,每次 404 都会计入失败计数,可能导致健康节点被误踢。
  • 破坏语义一致性:客户端收到 404,理应知道资源不存在;若 Nginx 隐式重试并最终成功,反而掩盖了后端部署不一致的问题。

替代更稳妥的做法(推荐优先考虑)

  • 用 consistent_hash 或 ip_hash 路由 + 主动健康检查:让相同资源固定打到同一节点,再配合 check 模块或 health_check(Nginx Plus)实时剔除异常节点。
  • 前端/CDN 层做多源回源:让 CDN 在源站返回 404 时自动切源,Nginx 专注做稳定代理,不承担业务语义判断。
  • 后端统一元数据服务:由独立服务告知“该文件在哪些节点上”,Nginx 通过 map + variables 动态选 upstream,而非盲目重试。

简单说:http_404 重试不是容错机制,而是对“部署不一致”的临时补救。治本之策是保证多节点数据一致,而非靠 Nginx 掩盖差异。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

proxy stream

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

457

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

980

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

3472

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

1136

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

1009

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

534

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

3196

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

6052

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

927

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
零基础精通 PS 视频教程
零基础精通 PS 视频教程

共268课时 | 120.6万人学习

前端工程师必备技能—PS切图
前端工程师必备技能—PS切图

共11课时 | 2.2万人学习

麦子学院Photoshop切片视频教程
麦子学院Photoshop切片视频教程

共13课时 | 4.3万人学习