先给结论:当源站返回正常、但边缘节点对同一 URL 返回 404、410、5xx 或连接失败时,最该保留的不是一句“边缘有问题”,而是一组能证明请求走过了哪条链路、边缘当时返回了什么、源站当时返回了什么、以及这个差异持续了多久的证据。缺少其中任何一层,后续都可能把边缘缓存或节点故障误判成真实死链,进而错误地删除、重定向或提交移除。
假设某站点把静态资源放在源站,前面挂了 CDN。运维在源站直接请求 /old-page.html,得到 200;通过 CDN 节点请求同一路径,却得到 404。此时如果只截一张 404 图就动手清理,等于默认“边缘结果代表真实状态”。更稳妥的做法是把这次异常当成一次可复现的对照实验:固定 URL、固定请求方法、固定时间窗,分别记录源站直连与边缘节点的响应,再判断差异是稳定存在还是偶发。
这个假设情境的关键不是谁对谁错,而是证据要能回答三个问题:边缘返回的 404 是它自己生成的,还是源站透传的?差异是单个节点还是多个节点?它是一次性抖动还是持续状态?
第一类是请求与响应元数据。对每个可疑 URL,记录完整请求 URL(含协议、主机、路径、查询串)、请求方法、请求时间(带时区)、发起位置或节点标识、响应状态码、响应头中的 Cache-Control、Age、Via、X-Cache 一类可表明缓存命中的字段,以及响应体前若干字节。响应体很重要:边缘自造的 404 页面和源站返回的 404 页面,正文往往不同,这是区分来源的直接线索。
第二类是源站直连对照。在尽量接近同一时间,绕过边缘直接请求源站,记录同样的状态码与响应头。若源站稳定返回 200,而边缘稳定返回 404,差异就落在边缘这一层;若源站也开始返回 404,则问题可能不在边缘,之前的判断需要推翻。
第三类是时间序列。单次请求不足以说明持续性。按固定间隔对同一 URL 重复取样,标注每次走的是哪个节点、命中还是回源。若只有部分节点异常、且异常集中在某个时间段,更像是节点或缓存层问题;若所有节点、所有时间都异常,则要重新检查源站配置或路由规则。
第四类是变更记录。保留异常出现前后对源站、缓存规则、重定向规则、回源配置所做的改动,以及改动生效时间。没有变更记录,就很难解释“昨天还好、今天异常”这类反差。
把证据摆开后,常见解释可以按下面的条件区分:
这里要特别说明一个容易误判的点:请求量、抓取量或某个统计指标归零,并不能单独证明边缘处理正确。它也可能是采集延迟、日志采样、监控口径变化或流量本身下降造成的。归零只是线索,必须和状态码、响应体、节点标识一起看。
假设证据显示:源站直连稳定 200,边缘某节点连续多次返回自带错误页的 404,且响应头显示缓存命中。此时一个合理动作是先对该 URL 做缓存刷新或失效,再在相同节点、相同时间间隔下重新取样。这个动作的结果会直接决定下一步:
无论走哪一步,都不要仅凭边缘的一次 404 就删除页面、设置重定向或提交索引移除。robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录;这些手段解决的是另一类问题,用在这里只会掩盖真正的边缘异常。
这套证据方法成立的前提是:你能区分源站直连与边缘访问,能记录节点或缓存标识,并且能在相近时间窗内重复取样。如果缺少节点标识,就只能证明“边缘整体异常”,无法定位到具体节点;如果取样间隔过长,缓存可能已经自然过期,异常也就无法复现。
另外,若站点同时使用多个边缘服务或多个域名,应分别记录每个服务的响应,不要混在一张表里比较。不同搜索引擎对同一异常的处理也可能不同,涉及收录影响时应分别核查,而不是用一个平台的观察结果推断全部。
把上面这些证据按 URL、时间、节点、状态码、响应体特征整理成可复查的记录,再决定是刷新缓存、升级工单还是回查源站,才能让“源站正常而边缘异常”这个反常结果变成可验证、可交接的判断依据。