先给结论:如果二级域名恢复后,旧内容消失、新内容出现的时间点与缓存TTL或CDN刷新时间高度吻合,那更可能是缓存过期;如果同一路径在不同网络、不同解析线路、不同爬虫UA下返回一致的新状态,并且持续超过一个刷新周期,才更接近真正修复。判断的关键不是“现在能不能打开”,而是“谁在什么条件下看到了什么版本”。
异常恢复后,团队通常面对两种选择:一种是立刻刷新CDN、清空反向代理缓存、重启应用,然后观察是否恢复;另一种是先保留异常现场,记录不同节点、不同UA、不同DNS线路的响应,再决定是否刷新。两种做法都合理,但适用条件不同。
如果异常表现是“部分地区旧页面、部分地区新页面”,且源站日志显示请求已经到达应用,那么优先固定证据更合适。因为此时缓存层可能只是放大了源站的不一致,直接刷新会掩盖真正的分歧点。反过来,如果异常表现是“源站已确认修复,但所有外部节点仍返回同一份旧响应”,且距离上次刷新已超过一个缓存周期,那么先刷新缓存再观察更高效,代价是可能失去判断缓存层是否独立出错的机会。
选择依据可以落到一个具体动作:在刷新前,用同一URL分别请求源站直连地址、CDN边缘地址和公共DNS解析后的地址,记录状态码、响应头和正文中的时间戳或版本标记。这个动作的结果会直接影响下一步——如果源站直连已经返回新版本,而边缘地址仍返回旧版本,问题在缓存层;如果源站直连也返回旧版本,缓存只是表象,真正修复尚未完成。
缓存过期和真正修复在表现上容易混淆,但有三类证据可以帮助区分。
If-None-Match或If-Modified-Since的请求,观察返回是304还是200。如果源站返回304且正文仍是旧版本,说明源站本身还在输出旧内容,不是缓存单独造成。这里要说明一个边界:请求量归零、抓取量下降或某个统计指标恢复,都不能单独证明修复正确。它们也可能是爬虫调度变化、日志采样调整或访问路径改变的结果。把统计变化当作唯一证据,容易把缓存过期误判为真正修复。
真正修复通常需要同时满足:源站对同一路径稳定返回预期版本;缓存层在刷新后不再回退到旧版本;不同解析线路和不同UA看到的结果一致;并且这种一致性能持续超过一个完整的缓存和抓取观察周期。
一个可执行的动作是:在二级域名上选择一个代表性路径,先记录源站直连的响应头和正文版本标记,再记录CDN边缘的响应头和正文版本标记,然后执行一次缓存刷新。刷新后,按固定时间间隔重复同样的请求,直到至少覆盖一个缓存TTL周期。如果刷新后边缘节点短暂返回新版本,随后又回退到旧版本,说明缓存层之上还有未修复的源站分歧或调度问题,下一步应回到源站日志和应用发布记录,而不是继续刷新缓存。
这个动作的结果会改变后续判断:如果刷新后所有节点稳定返回新版本,并且源站日志显示请求正常处理,才可以认为修复基本成立;如果只有部分节点稳定,仍需按解析线路和缓存层级继续排查。
有些异常恢复后,表面上看像缓存过期,但实际上不能只用缓存解释。例如,二级域名下的某个路径在搜索引擎结果中仍显示旧标题,但直接访问已经返回新内容。这可能是索引更新滞后,而不是缓存未过期。robots.txt的抓取限制不等于可靠的索引移除,站点地图也不保证收录,因此不能把“提交了新站点地图”当作修复完成的证据。
另一种例外是HTTPS配置变更后,部分客户端仍看到旧证书或旧跳转。HTTPS不保证安全无漏洞或排名,证书链和协议支持情况需要分别核查。如果异常恢复后只有特定客户端或特定地区仍表现异常,优先检查DNS解析、CDN节点和客户端缓存,而不是直接认定源站已修复。
假设一个场景:某二级域名在异常恢复后,源站直连返回新版本,CDN边缘在刷新后十分钟内也返回新版本,但两小时后部分线路又回到旧版本。此时不能因为“曾经看到新版本”就判定修复完成。更合理的下一步是检查缓存刷新任务是否覆盖全部节点、源站是否存在多实例版本不一致,以及DNS调度是否把部分用户导向了未更新的实例。只有把这些条件逐一排除,才能把“缓存过期”和“真正修复”分开。