记录一下那天晚上的排查过程。站点清理了三万个失效附件,源站已配置 410。三个月后百度快照里这些地址仍是旧图,日志显示 CDN 命中缓存,状态码 200,蜘蛛一直认为页面还在,反复重抓。

刚开始盯着「410 的上线时间在缓存写入之后,旧副本一直没被替换」,折腾了半个多小时,排掉了。

把日志和配置对完,能解释这个现象的基本就这几处。下线时只改了源站规则,没有刷新边缘缓存。少数情况下是CDN 对 200 响应给了三十天 TTL,命中后不回源。

还有一种情况,死链与 410 混在同一批地址里 提交前没有分开处理。

动手时先对比源站与边缘的状态码

curl -sI https://www.example.com/uploads/2020/a.jpg; curl -sI -H 'Host: cdn.example.com' https://cdn.example.com/uploads/2020/a.jpg

再往下按目录批量刷新边缘缓存

curl -X PURGE https://cdn.example.com/uploads/2020/a.jpg

然后确认 410 已经透传到边缘

curl -s -o /dev/null -w '%{http_code}\n' https://www.example.com/uploads/2020/a.jpg

等前面都确认过,再改用死链提交工具加速清理

curl -s https://www.example.com/sitemap-dead.xml | grep -c '<loc>'

怎么算真的好了,看的是同一批现象。刷新后边缘节点返回 410,两周内这批地址在抓取日志里的请求量下降九成,索引量按预期回落而不是被当成异常掉量。

这里还有个坑。下线内容要先刷缓存再改源站,顺序反了就会出现源站 410、边缘 200 的错位,而且很难靠监控发现。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189