启用proxy_cache_use_stale updating配合proxy_cache_background_update on,可使Nginx在缓存过期时立即返回旧内容(X-Cache: STALE)并后台异步刷新,避免多请求同步回源引发的“请求风暴”;需同时配置proxy_cache_path、proxy_cache、proxy_cache_valid和proxy_cache_background_update on四项。

用 proxy_cache_use_stale updating 配合 proxy_cache_background_update on,就能在缓存即将过期或已过期时,让用户请求立刻返回旧内容,同时后台悄悄刷新缓存——彻底避开“缓存更新瞬间风暴”。
为什么缓存更新会引发请求风暴
当大量用户在同一时刻访问一个刚过期的热门资源(比如首页、活动接口),Nginx 默认行为是:所有请求都同步回源。哪怕只差几毫秒,也可能触发几十甚至上百个并发回源请求,瞬间压垮上游服务。
这种现象和总流量大小关系不大,关键在于三点:
阿里百炼大模型平台多人共享账号用量统计代理服务。解决公司共用账号时无法区分个人用量的问题。适用场景:1)部署用量统计代理;2)统计多人Token用量和调用次数;3)管理大模型API调用配额。
- 缓存有效期固定(如统一设为5分钟)
- 用户访问集中在缓存到期前后
- 缺乏协调机制,多个请求无法共享一次更新
updating 参数的真实作用
proxy_cache_use_stale updating 本身不触发更新,只是“授权”使用当前已有的缓存内容(哪怕已过期)。它依赖另一个指令才能真正起效:
-
proxy_cache_background_update on才负责检测缓存状态,并在后台发起低优先级子请求去拉新内容 - 只有两者配合,才构成完整闭环:主响应不等、旧内容照发、新内容后台写入
必须同时配置的四个基础项
单独加 updating 不起作用。以下四项缺一不可:
-
proxy_cache_path正确定义缓存区,含keys_zone(如my_cache:10m) -
proxy_cache在 location 中启用对应缓存区 -
proxy_cache_valid明确设置缓存有效期(如200 5m),否则 Nginx 无“过期”概念 -
proxy_cache_background_update on开启后台更新能力
验证是否生效的关键观察点
别只看日志,重点确认这三件事:
- 停掉后端服务后,用户请求仍能快速返回(响应时间远低于
proxy_read_timeout) - 响应头中出现
X-Cache: STALE(需配置add_header X-Cache $upstream_cache_status;暴露) - 缓存目录中对应 key 的文件修改时间持续更新,说明后台刷新正在运行

















