在 nginx 中,`proxy_cache_use_stale` 遇到 502 错误时无法自动切换兜底服务,因为该指令仅控制缓存的可用性,不改变上游请求的目标。要实现自动切换兜底,必须结合 `upstream` 模块的 `backup` 参数或 `error_page` 指令配合重定向。

如何配置 upstream 实现主备切换
通过在主服务器组中标记备用服务器为 `backup`,Nginx 会在主服务器返回 502(通常因连接失败)时自动将流量转发至备用节点。

upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080 backup;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_next_upstream error timeout;
}
}预期结果:当 192.168.1.10 不可达时,请求自动路由到 192.168.1.11。
如何使用 error_page 处理特定错误码
若需自定义错误响应而非切换上游,可使用 error_page 指令捕获 502 并返回静态页面或重定向到其他 URL。

server {
listen 80;
location / {
proxy_pass http://192.168.1.10:8080;
error_page 502 /fallback.html;
location = /fallback.html {
root /usr/share/nginx/html;
internal;
}
}
}预期结果:当上游返回 502 时,Nginx 内部重定向到 /fallback.html 并返回本地文件内容。
基于 proxy_next_upstream 的具体行为验证
在程序中,proxy_next_upstream 默认包含 error 和 timeout,这意味着 502 会触发重试。若未配置 backup 服务器,重试将失败并返回 502;若配置了 backup,则成功切换。


















