Nginx突发故障时用return 302实现快速降级:5分钟内生效,精准作用于异常路径,通过精确匹配location和internal保护降级页,添加X-System-Status响应头标识状态,并用curl验证跳转、404及健康检查。

突发故障时启用 Nginx 302 临时降级跳转,核心是“快、准、稳”:5 分钟内生效,只影响异常路径,不干扰搜索引擎和用户预期。关键不是写复杂逻辑,而是用最轻量指令立刻切断问题流量,导向可用页面。
用 return 302 立即生效,不走任何后续匹配
在 server 或 location 块中直接写 return,Nginx 遇到即返回,不解析正则、不查 upstream、不触发其他规则:
- 全站快速降级(如主站完全不可用):
return 302 /degrade.html; - 仅对故障模块降级(如 /api/ 和 /checkout/ 失效):
location ^~ /api/ { return 302 /degrade.html; }
location ^~ /checkout/ { return 302 /degrade.html; } - 目标页必须用 internal 保护,防止用户直输 URL 访问:
location = /degrade.html { root /usr/share/nginx/html; internal; }
确保降级页本身不被跳转循环
常见失效原因就是 /degrade.html 被自身规则又匹配了一次。必须显式排除:
- 不要用 location / { ... } 包住所有路径——它会覆盖 /degrade.html
- 用精确匹配 location = /degrade.html 单独定义,并加 internal
- 如果用了 rewrite,务必确认 redirect 后没再进其他 location;return 是更安全的选择
带状态标识便于监控和前端识别
运维和前端需要立刻感知当前处于降级态,加响应头比改 HTML 更快:
- add_header X-System-Status "degraded" always;
- add_header Cache-Control "no-cache, no-store" always;(防 CDN 或浏览器缓存旧跳转)
- 前端可读取该 header 自动隐藏非核心功能,或展示「服务暂不稳定」提示
上线前用 curl 快速验证三件事
别等用户反馈——重载配置后立即执行:
- curl -I http://yoursite.com/api/v1/users → 检查是否返回 HTTP/1.1 302 Found 及正确 Location
- curl -I http://yoursite.com/degrade.html → 应返回 404 Not Found(因 internal 限制)
- curl -I http://yoursite.com/health → 若有健康检查路径,应仍返回 200,不被降级规则捕获


















