如何通过Nginx proxy_cache_background_update模块实现静默过期缓存更新?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1015个文字,预计阅读时间需要5分钟。
“
(请提供需要改写的原文内容,以便我进行相应的简写和修改。)
为什么开了 proxy_cache_background_update 还会压垮上游?
因为 proxy_cache_background_update on 只表示“缓存过期后先返回旧内容,再后台发起一次更新请求”——但它不判断“此刻是否已有同键更新在进行”。1000 个并发请求击中同一个过期缓存键,Nginx 就会默认发起 1000 次后台更新,和没开缓存几乎一样。
常见错误现象:upstream connect timeout、502/504 突增、上游 CPU 或连接数飙升;日志里反复看到同一 $uri 在几秒内触发数十次 MISS 或 UPDATING。
- 它不是锁机制,不解决并发冲突
- 它不控制资源(连接、缓冲区、超时),后台请求和主请求共用同一套
proxy_*_timeout和proxy_buffers - 它不区分请求来源,GET/HEAD/带 Cookie 的请求只要缓存键一致,就都可能触发后台更新
必须配 proxy_cache_lock,否则 background_update 就是“伪静默”
proxy_cache_lock on 才是让多个并发请求对同一缓存键“排队等刷新”的关键。
本文共计1015个文字,预计阅读时间需要5分钟。
“
(请提供需要改写的原文内容,以便我进行相应的简写和修改。)
为什么开了 proxy_cache_background_update 还会压垮上游?
因为 proxy_cache_background_update on 只表示“缓存过期后先返回旧内容,再后台发起一次更新请求”——但它不判断“此刻是否已有同键更新在进行”。1000 个并发请求击中同一个过期缓存键,Nginx 就会默认发起 1000 次后台更新,和没开缓存几乎一样。
常见错误现象:upstream connect timeout、502/504 突增、上游 CPU 或连接数飙升;日志里反复看到同一 $uri 在几秒内触发数十次 MISS 或 UPDATING。
- 它不是锁机制,不解决并发冲突
- 它不控制资源(连接、缓冲区、超时),后台请求和主请求共用同一套
proxy_*_timeout和proxy_buffers - 它不区分请求来源,GET/HEAD/带 Cookie 的请求只要缓存键一致,就都可能触发后台更新
必须配 proxy_cache_lock,否则 background_update 就是“伪静默”
proxy_cache_lock on 才是让多个并发请求对同一缓存键“排队等刷新”的关键。

