Nginx proxy_cache_use_stale如何让504源站故障时,陈旧缓存自动降级?
- 内容介绍
- 文章标签
- 相关推荐
本文共计868个文字,预计阅读时间需要4分钟。
当源站返回504 Gateway Timeout错误时,Nginx默认会将错误直接传递给用户。但如果你已缓存过该资源,则结果如下:
为什么 504 场景下 stale 能生效
504 是明确的上游网关超时响应,属于 proxy_cache_use_stale 原生支持的触发条件之一。它和 error(连接失败)、timeout(读取超时)不同:504 表示后端已接收请求但未能按时完成,Nginx 收到的是完整 HTTP 响应包(含状态行和头),因此可安全复用历史缓存。
- 只要该 URL 曾成功缓存过(哪怕已过期),且配置了
http_504参数,Nginx 就会在收到 504 时立即返回陈旧副本 - 无需等待后台更新完成,也不依赖
proxy_cache_background_update - 响应速度接近本地磁盘读取,通常在毫秒级,远快于重试或报错
必须配套的基础缓存配置
单独加 proxy_cache_use_stale http_504 不起作用。
本文共计868个文字,预计阅读时间需要4分钟。
当源站返回504 Gateway Timeout错误时,Nginx默认会将错误直接传递给用户。但如果你已缓存过该资源,则结果如下:
为什么 504 场景下 stale 能生效
504 是明确的上游网关超时响应,属于 proxy_cache_use_stale 原生支持的触发条件之一。它和 error(连接失败)、timeout(读取超时)不同:504 表示后端已接收请求但未能按时完成,Nginx 收到的是完整 HTTP 响应包(含状态行和头),因此可安全复用历史缓存。
- 只要该 URL 曾成功缓存过(哪怕已过期),且配置了
http_504参数,Nginx 就会在收到 504 时立即返回陈旧副本 - 无需等待后台更新完成,也不依赖
proxy_cache_background_update - 响应速度接近本地磁盘读取,通常在毫秒级,远快于重试或报错
必须配套的基础缓存配置
单独加 proxy_cache_use_stale http_504 不起作用。

