先给结论:源站正常、边缘异常时,最该保留的不是一句“节点挂了”,而是能证明请求在哪一跳开始偏离预期的证据。至少要有三类:同一时刻从不同位置对同一资源的响应记录、边缘返回的完整响应头与状态、以及源站侧对应时间窗的访问日志。只有这三类能互相对上,才能把“节点故障”和“源站其实已经异常但被缓存掩盖”区分开。
假设一个场景:你从源站IP直连拉取某个页面,返回200和完整内容;但通过边缘节点访问,返回502、旧版本页面,或者干脆超时。直觉会得出“边缘节点坏了”,但这个结论成立的前提是源站确实在同一时刻、对同一路径给出了正确响应。
矛盾点在于:边缘节点可能根本没把请求转发到源站,也可能转发了但源站对边缘回源请求返回了不同结果。比如源站对特定User-Agent、特定Host头或特定回源IP做了限制,直连测试用的是浏览器请求,回源请求用的是节点标识,两者结果自然不同。此时源站“正常”只是对直连正常,不代表对边缘正常。
解释一:边缘节点本身故障或配置漂移。表现为同一节点持续失败、其他节点正常,或者节点返回的错误页带有节点自身标识。这类问题通常与源站无关,修复动作在边缘侧。
解释二:源站对边缘回源请求的响应与对直连请求不同。表现为只有经过边缘才失败,直连始终正常,但源站日志里能看到回源请求并伴有异常状态码、超时或连接重置。这类问题的根因在源站策略、证书、防火墙或应用层,边缘只是把源站的问题暴露出来。
两种解释都会产生“边缘异常”的表象,但修复方向完全相反。判断错方向,可能反复重启节点却始终不解决问题。
下面这些证据要同一时间窗内采集,否则无法对照。时间戳尽量精确到秒,并记录时区。
Server、Via、X-Cache、Age、CF-Ray一类由边缘注入的字段(具体字段名取决于所用服务,需自行核对)。这些字段能说明请求是否到达边缘、是否命中缓存、是否尝试回源。curl -v或等效方式保存完整交互过程,包括请求头、响应头、TLS握手细节。这是最不容易被二次解读扭曲的证据。假设某资源通过边缘访问持续返回502,直连源站返回200。第一判断是“边缘节点故障”。此时按上面的清单采集:
Via字段存在,说明请求确实到达了边缘;Age为0,说明未命中缓存,边缘尝试回源。到这里,证据指向的是源站对回源请求处理异常,而不是边缘节点故障。下一步动作应该是调整源站对回源请求的策略或放行规则,而不是继续在边缘侧排查。如果跳过第3步直接重启节点,问题会复现,因为根因没变。
坑一:只测一个位置。单点失败可能是本地网络、DNS缓存或运营商链路问题,不能直接归因于边缘节点。多位置对照是区分“节点问题”和“路径问题”的最低要求。
坑二:只看状态码不看响应头。502和503可能来自边缘,也可能来自源站透传。响应头里的边缘标识和缓存状态是判断请求走到哪一步的关键,缺失这部分证据会让归因停留在猜测。
坑三:源站日志时间窗对不上。边缘和源站的时钟可能不同步,日志时区也可能不同。采集时先确认两边时间基准,否则会得出“源站没收到请求”的错误结论,而实际只是时间窗错位。
另外要说明:robots.txt的抓取限制不等于可靠的索引移除,站点地图不保证收录,HTTPS也不保证安全无漏洞或排名提升。这些与本题的证据判断无关,但在整理证据时如果涉及这些文件或协议,不要把它们的存在当作问题已解决的依据。
证据采集完成后,按“请求是否到达边缘、是否到达源站、源站返回什么”三个节点逐一核对。如果请求到达边缘但未到达源站,排查边缘到源站的网络与配置;如果到达源站但返回异常,排查源站策略与应用日志;如果请求根本没到边缘,排查DNS解析与本地网络。每一步的结论都应由上一步的证据支撑,而不是由直觉跳跃得出。保留原始报文和日志片段,是因为后续修复验证时需要同样的证据来确认问题是否真正消失,而不是被缓存或临时状态掩盖。