Laminas应用404页面缓存问题:仅强制刷新才加载新内容
精准定位缓存失效目标
你之前只清除了根域名的缓存,但问题出在具体的404路径上。Akamai、Varnish这类缓存系统,根域名的失效指令不一定能覆盖动态生成的404页面。直接针对问题URL执行缓存失效:- Varnish可使用CLI命令:
ban req.url == "/saflkjshf/" - Akamai在控制台选择该具体路径执行Purge操作,不要仅选择根域名。
- Varnish可使用CLI命令:
检查浏览器本地缓存
强制刷新有效,说明浏览器存储了旧的404页面。查看404响应的HTTP头,重点关注Cache-Control、Expires字段,如果设置了过长的缓存时间,浏览器会直接使用本地缓存。给404页面设置严格的缓存策略:Cache-Control: no-cache, no-store, must-revalidate,彻底避免浏览器缓存旧内容。验证Memcache的缓存键
确认Laminas应用中404页面的缓存键是否与根域名的缓存键分离。之前的失效操作可能未命中404对应的键。可以在代码中添加日志打印404生成时的缓存键,直接删除该键;测试环境下也可重启Memcache服务(生产环境需谨慎操作)。排查Varnish的404缓存规则
检查VCL配置中是否存在针对404响应的特殊缓存逻辑,比如单独设置TTL或忽略失效指令。例如如果有if (beresp.status == 404) { set beresp.ttl = 24h; }这类规则,普通的根域名失效将不起作用,需针对404请求单独处理。确认Akamai节点同步状态
Akamai的全球边缘节点缓存失效可能存在延迟,使用其Purge Status工具查看失效请求的执行情况,确保所有节点都完成了缓存更新。另外如果自定义了CDN缓存键,要确认404请求的缓存键与常规请求是否一致,避免失效指令不匹配。
内容的提问来源于stack exchange,提问作者Rajsekar Reddy

