同一服务器网站出现“有的页面正常、有的页面异常”,先别急着改配置或判定程序出错。要排除缓存假象,核心做法是让请求绕过所有可能缓存层,直接对比源站返回:先用无缓存强制刷新看浏览器层,再用带随机查询串或禁用缓存的请求头看CDN/代理层,最后在服务器本机用回环地址请求看应用层。三层结果一致,才说明看到的是源站真实状态;只要有一层不同,就说明该层存在缓存或中间处理。
同一服务器上多个站点共用资源时,缓存可能来自四个位置:浏览器本地缓存、CDN或反向代理缓存、服务器软件缓存(如页面缓存、对象缓存)、应用内部缓存。它们表现相似,但排查入口不同。
注意:以上只是“可能原因”,不能凭单一现象断言。必须用可复现的请求对比来定位。
以下步骤按从外到内顺序执行,每一步记录状态码、响应头和正文关键片段。
Ctrl+F5 或 Cmd+Shift+R。若内容更新,说明问题在浏览器缓存,清理该站点缓存即可,不必动服务器。https://example.com/page 改为 https://example.com/page?nocache=20240101。若返回新内容,说明原URL被CDN或代理缓存;若仍返回旧内容,继续下一步。Cache-Control: no-cache 与 Pragma: no-cache。若结果变化,说明中间层尊重这些头;若不变化,说明该层可能忽略或未配置。curl -I http://127.0.0.1/page 或带Host头请求。若本机返回新内容而外网返回旧内容,问题在服务器之外的缓存层;若本机也返回旧内容,问题在服务器软件或应用缓存。Age、X-Cache、Cache-Control、Expires、ETag。出现较大 Age 通常表示响应来自缓存;但不同服务实现不同,需结合日志判断。确认存在缓存后,常见处理分两类:主动清除缓存,或调整缓存策略让更新自动生效。
Cache-Control 或使用基于内容版本号的URL,为静态资源设置长缓存加文件名哈希。优点是减少人工干预;缺点是需要改配置并验证,配置错误可能导致缓存失效或回源压力上升。判断依据:如果只是个别页面临时出错,先主动清除并观察是否复发;如果同一服务器上多个站点反复出现旧内容,优先检查共用缓存层和策略配置。
无论选哪种方案,验收都应基于可重复的请求对比,而不是“刷新后好像好了”。
责任划分上,浏览器层由访问者本地环境决定;CDN/代理层由对应服务配置方负责;服务器软件与应用缓存由站点运维或开发负责。交付结果应包含:问题层级结论、已执行的请求命令与返回摘要、所选处理方案及适用理由、验收通过的具体证据。
缓存问题常和收录、索引问题混在一起。需要区分:robots.txt 的抓取限制不等于可靠的索引移除;站点地图不保证收录;HTTPS 不保证安全无漏洞或排名。这些属于搜索引擎抓取与索引范畴,不能用来解释同一服务器网站上的缓存假象。若排查后确认源站返回正常,但搜索结果仍显示旧内容,应分别核查各搜索引擎的缓存与索引状态,而不是继续在服务器缓存上反复操作。
下一步:选一个已确认异常的URL,按上述五步完整执行一次,记录每层返回的状态码与正文摘要,再决定是清除缓存还是调整策略。