nginx中需在location内配置error_page配合proxy_intercept_errors on实现路径级错误降级,使用internal命名location提供安全、干净的本地响应,各路径可独立定义降级策略且不相互影响。

Nginx 的 location 块中使用 error_page 指令,可以为某个路径下的特定 HTTP 错误(如 502、503、504)提供本地降级页面,而不影响其他路径。关键在于作用域控制和错误捕获的精确性。
确保 error_page 在 location 内定义且启用 intercept
默认情况下,error_page 触发的是外部重定向(302),这不符合“降级页面”需求。必须配合 proxy_intercept_errors on(若后端是 proxy)或明确指定内部重定向路径:
-
proxy_intercept_errors on必须放在该location块内,否则上游错误不会被 Nginx 拦截处理 -
error_page 502 503 504 /fallback.html中的/fallback.html是 URI,需对应另一个location = /fallback.html或 root 下真实文件 - 避免写成
error_page 502 /var/www/html/fallback.html—— 这是文件路径,Nginx 不支持直接返回本地文件路径(除非用alias+internal)
用 internal location 提供真正的降级响应
推荐将降级页面设为内部 location,防止用户直接访问,并确保响应头干净:
location /api/v1/ {
proxy_pass https://backend;
proxy_intercept_errors on;
error_page 502 503 504 = @api_fallback;
}
location @api_fallback {
internal;
root /usr/share/nginx/html;
try_files /fallback-api.json =404;
}
这里 @api_fallback 是命名 location,internal 保证只能被内部跳转触发;try_files 安全读取本地 JSON 降级内容,不暴露文件系统结构。
区分不同路径的降级策略
多个业务路径可各自定义独立降级行为:
-
/status/出错时返回轻量纯文本(text/plain) -
/dashboard/出错时返回带重试按钮的 HTML 页面 -
/payment/出错时返回 503 + 自定义 Retry-After 头
只需为每个 location 单独配置 error_page 和对应的处理块,互不影响。
注意 error_page 的继承与覆盖规则
error_page 不自动继承父块配置。若在 server 级写了通用降级,但某个 location 也定义了 error_page,则以 location 内的为准;若 location 内未定义,则回退到 server 级。建议显式声明,避免意外 fallback。










