这类问题我又碰上了一次。站点给所有响应加了 Vary: Cookie 想让登录态正确 结果 CDN 把每个带不同 Cookie 的请求都当独立缓存 蜘蛛不带 Cookie 每次都是 MISS 回源率 98% 首页 TTFB 从 80ms 涨到 900ms
第一反应是「CDN 对 Vary 只认精确匹配」,验证下来不成立。
把日志和配置对完,能解释这个现象的基本就这几处。Vary 头包含 Cookie 缓存键被无限拆分;登录态和游客页共用同一份缓存策略;页面里嵌了按 Cookie 渲染的推荐模块。
上来先看响应头里的 Vary 值
curl -sI https://www.example.com/ | grep -i vary
去掉不需要的 Vary 维度
more_clear_headers 'Vary'; add_header Vary Accept-Encoding;
接着登录用户绕过缓存
proxy_cache_bypass $cookie_logged_in;
等前面都确认过,再验证两次请求是否命中缓存
curl -sI https://www.example.com/ | grep -i -E 'cf-cache-status|x-cache'
隔了一天再看,现象没变,说明不是偶发。
怎么算真的好了,看的是同一批现象。第二次请求命中缓存 回源率降到 10% 以下 TTFB 回到 100ms 以内。
Vary 写一个维度 缓存就多一份副本 不确定要不要加时 先想想游客页是不是真的不同。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
