limit_req_status仅能修改限流状态码,无法跳转或返回内容;必须配合error_page = @name与internal命名location,用return内联响应实现零开销降级。

直接用 limit_req_status 无法实现“重定向至降级页”,它只负责改状态码;真要跳转页面或返回轻量兜底内容,必须配合 error_page + 内部命名 location 实现,且整个过程需保持低开销、零后端依赖。
明确 limit_req_status 的边界作用
limit_req_status 是一个纯状态码开关,仅影响响应头中的 Status 字段。它不生成响应体、不设置 Header、不触发跳转——哪怕你写 limit_req_status 302,也不会自动 Location 重定向。Nginx 不会帮你做 HTTP 重定向逻辑,它只是把 503 换成你指定的码(如 429、403、甚至 598)。
用 error_page 实现真正的“降级响应”
要返回静态 HTML 降级页(比如 /rate-limited.html),或直接输出轻量 JSON,必须走 error_page 内部跳转路径:
- 写法必须带等号:
error_page 429 = @degraded;(=表示内部重定向,客户端看到的仍是 429 状态) - 命名 location 要加
internal;,防止被外部直接访问 - 响应体用
return直接输出,避免proxy_pass引入延迟和失败点
示例配置:
/degrade.html











