当死链扫描工具报告大量失败,而你在源站直接请求同一批 URL 却全部返回 200,问题通常不在页面本身,而在源站与扫描器之间的边缘节点。此时最该保留的不是“扫描失败了多少条”这个总数,而是能区分“源站正常、边缘异常”与“源站其实也不稳定”的对照证据。核心做法是:对同一 URL 同时保留源站直连结果和边缘路径结果,并记录时间、请求头、响应头和节点标识,让两组数据可以逐条比对。
边缘节点异常不是一个单一原因。扫描器看到的失败至少可能来自三种不同层面,证据需求也不同。
如果你只保留“失败 URL 列表”,这三类会被混在一起,后续无法判断该找 CDN、改缓存规则,还是回源站排查。先按失败阶段分类,再决定每类保留哪些字段,是让证据可用的前提。
最能说明“源站正常而边缘异常”的证据,是同一时刻、同一 URL 的两组结果。假设你有一个页面 https://example.com/a,可以这样取对照:
如果边缘返回 404 而源站返回 200,差异就落在状态码上;如果两边都是 200 但响应体指纹不同,差异就落在缓存或内容替换上。这个动作的价值在于:它把“扫描器说坏了”变成“哪一层、哪个字段坏了”,下一步的排查对象也随之明确。注意,直连源站时要避免经过同一边缘层,否则对照就失去意义。
截图容易缺字段、难比对。更可靠的是保留原始响应和结构化记录。对每个可疑 URL,至少保留以下内容:
其中响应头和节点标识最关键,因为它们能区分“边缘自己生成了错误”和“边缘回源拿到了错误”。如果响应头显示缓存命中且状态码异常,问题可能在缓存内容;如果显示回源失败,问题可能在源站连通性或回源配置。保留这些字段后,你才能把问题交给对应的一方,而不是笼统地说“扫描报错”。
证据要能被别人复查,否则只是你的单次观察。建议把每个 URL 的记录写成可重放的命令或脚本输出,而不是手工抄写。例如,用 curl -sS -D - -o /dev/null 分别对边缘地址和源站地址各执行一次,把输出保存为带时间戳的文件。这样任何人拿到文件都能看到当时的请求头、响应头和状态码。
同时记录扫描器的配置:并发数、超时阈值、重试次数、User-Agent。因为并发过高或超时过短,本身就会制造“源站正常、扫描失败”的假象。如果降低并发、延长超时后失败消失,那说明原先的失败更可能是扫描器压力或边缘限流导致,而不是页面真的坏了。这一步的结果会直接改变下一步:是调整扫描参数,还是继续追边缘节点。
有些观察看起来像证据,实际上有多种解释,不能单独用来下判断。
要区分这些解释,需要多节点、多时点的对照记录。单次、单点的结果只能作为线索,不能作为结论。把线索和结论分开记录,后续复盘时才不会被误导。
当你手里有了双路径对照记录,下一步不是立刻改配置,而是先判断问题落在哪一方的责任边界内。
每完成一步,都用同样的对照方法复测一次,确认差异字段是否消失。只有差异字段消失,才能说这一步处理有效;如果差异仍在,说明判断的责任边界不对,需要回到证据重新分类。这样处理,死链扫描工具的报告才会从“一堆失败链接”变成可定位、可验证、可交接的排查依据。