搜索抓取

CDN 缓存与蜘蛛抓取:回源、缓存失效和内容版本不一致的排查

不少站点把 CDN 当成纯加速工具,却忽略了搜索蜘蛛也是通过这些边缘节点取页面的。缓存命中率、回源策略、刷新时机和频控规则,都会改变蜘蛛实际看到的内容。本文按抓取路径梳理缓存版本不一致、回源慢导致超时、误拦蜘蛛等问题,并给出一条可执行的排查顺序。

搜索抓取

CDN 缓存与蜘蛛抓取:回源、缓存失效和内容版本不一致的排查

很多站点把 CDN 当成单纯的加速工具,配置好缓存规则就不太管了。但搜索蜘蛛取页面时,走的也是这些边缘节点:请求先落到离它最近的机房,命中缓存就直接返回,没命中才回源。也就是说,蜘蛛看到的版本、等待的时间、甚至能不能拿到内容,都会受缓存与回源策略影响。

蜘蛛拿到的,是边缘节点上的那一份

源站内容更新之后,边缘节点不一定同步更新。如果缓存时间设得偏长,蜘蛛在缓存有效期内访问,读到的仍是旧页面。对普通内容页影响不算大,但下面几种情况值得注意:

  • 页面标题、正文或价格做过实质修改,缓存未刷新,蜘蛛记录的还是旧版本;
  • 已下线的 URL 缓存未清理,边缘继续返回 200 和旧内容,蜘蛛无法确认页面已不存在,会反复回访;
  • 列表页、聚合页更新频繁,却沿用了内容页的长缓存,蜘蛛多次访问看到同一份快照。

判断方法不复杂:在本地或服务器上用命令行请求该 URL,对比边缘返回与源站直连返回是否一致,重点看缓存命中相关的响应头。

回源慢,表现出来就是抓取超时

边缘节点没有内容时,会向源站发起回源请求。如果源站响应偏慢,或者回源链路不稳定,蜘蛛在边缘侧等到的就是一个迟迟不返回的响应,最终以超时结束。日志里常见的形式是连接已经建立,但迟迟没有完整响应体,容易被误判成源站故障,实际瓶颈可能在回源环节。

可以留意的信号:同一批 URL 的超时是否集中出现在缓存刚刷新之后、流量高峰时段,或者集中在某类需要实时回源的页面上。如果是,优先看回源耗时和源站并发承载,而不是先改页面。

缓存刷新的方式与节奏

多数 CDN 都支持按 URL、按目录或按标签刷新。小站点按 URL 精确刷新够用;内容量大、发布频繁的站点,更适合把刷新动作接进发布流程,做目录级或标签级刷新,减少遗漏。

刷新之后最好确认一次边缘返回的是新版本,再把新的入口链接放出去。否则蜘蛛顺着新入口过来,仍然可能读到旧内容,形成新的版本差。

别把正常抓取当成攻击

CDN 通常自带频控、CC 防护和 WAF。蜘蛛的访问往往集中且并发偏多,很容易被规则命中,返回 403、503 或者一个验证页。这时候站点看起来没报错,抓取量却悄悄下降。

处理思路是按官方公布的蜘蛛 IP 段做白名单放行,而不是只凭 User-Agent 判断,因为 UA 是可以伪造的。放行范围不要过宽,避免给真实攻击留下口子。

一条可以照着走的排查顺序

  1. 用命令行请求目标 URL,确认边缘返回与源站直连是否一致;
  2. 对比响应头里的缓存命中与回源信息,判断内容来自缓存还是源站;
  3. 检查是否有缓存未刷新或防护规则拦截了蜘蛛请求;
  4. 核对刷新时间与内容发布时间,看是否存在时间差;
  5. 再回到抓取统计里,看异常是否集中在某类页面或某个时间段。
抓取出问题,不一定是源站的问题。边缘节点同样是这条路径上的一个变量。

把 CDN 纳入抓取自查范围

站点运营里,CDN 的配置往往在技术侧一次做好就长期不动,而内容却在持续变化。建议在发布流程里固定两步:内容变更后刷新对应缓存,下线页面时同步清理缓存。同时定期确认防护规则没有误伤正常抓取。这两件事做稳,蜘蛛看到的版本才和用户看到的一致,抓取路径也不容易被无谓的 403、超时打断。