开启 fastcgi_cache_lock on 后,Nginx 通过串行化回源避免雪崩:首个请求获锁并回源,其余请求在用户态阻塞最多5秒等待缓存写入后统一返回;超时则各自回源。
开启 fastcgi_cache_lock on 后,Nginx 能确保同一未缓存 URL 的多个并发请求中,只有一个穿透到 PHP-FPM,其余请求在 Nginx 层等待结果写入缓存后直接返回——这本质上不是“防重复”,而是“串行化回源”,从而避免大量请求同时打到后端造成雪崩。
当多个请求命中同一个 cache key 且当前无有效缓存时:
如果请求 URL 或 header 导致 cache key 不同,锁就形同虚设。常见问题包括:
?t=123456)→ 每次 key 都不同Set-Cookie 或 Cache-Control: no-cache → Nginx 默认不缓存,导致反复 missfastcgi_ignore_headers Set-Cookie Cache-Control; 必须显式配置fastcgi_cache_key "$scheme$host$request_uri";(不含 $args 或 cookie 相关变量)单独开 lock 效果有限,需与以下参数协同:
inactive 控制清理节奏并非所有场景都适用:
limit_req)、降级(fastcgi_cache_use_stale error timeout)或异步预热