商品价格已经更新,Magento cache 也刷新过,但前台几小时还是旧值。响应头里能看到 HIT,于是有人直接把 TTL 调小。这样可能掩盖问题,却不能解释为什么正常 purge 没让对象失效。
先确认请求经过了谁
curl -sS -D - -o /dev/null https://shop.example.com/product.html
curl -sS -D - -o /dev/null https://shop.example.com/product.html关注 Age、Varnish 标记、CDN 标记及 Magento cache debug。如果前面还有 CDN,Varnish 已 purge 但 CDN 仍命中,看起来就像 Varnish 没刷新。
确认 purge 到达正确主机
后台配置的缓存主机和线上真实地址经常不一致,尤其在容器和迁移后。刷新时同时看 Magento 日志与 Varnish access log,确认 PURGE/BAN 到达且 ACL 允许来源。
自定义实体若没返回正确 identity tag,系统不知道页面依赖它;使用过大的 tag 又会让一次小改动清掉大量页面。
别忽略 grace 和后端健康
后端 unhealthy 时,Varnish 可能在 grace 内继续提供陈旧内容。这是保可用性设计。应查健康检查 URL、nginx/PHP 响应与 Varnish 日志,而不是反复 cache:flush。
修复后做一次可追踪测试:修改无风险文本,记录保存时间,观察失效请求、Age 归零、下一次 MISS、随后再次 HIT。把链路跑通,比关掉缓存更能说明问题。

