蜘蛛池知识

蜘蛛池接入 CDN 与 WAF:别把搜索引擎蜘蛛一起拦掉

蜘蛛池入口站挂 CDN、开 WAF 之后抓取量骤降,往往不是内容问题,而是请求在边缘节点就被拦掉了。本文说明如何通过日志和返回码区分“被拦”与“没来”,列出 UA 黑名单、单 IP 限速、地域封禁等常见误伤配置,并给出按官方 IP 段放行、反向 DNS 校验、灰度验证的做法。

蜘蛛池知识

蜘蛛池接入 CDN 与 WAF:别把搜索引擎蜘蛛一起拦掉

给蜘蛛池的入口站挂 CDN、开 WAF,本来是为了挡住扫描器和恶意爬虫,但配置稍微粗放一点,搜索引擎蜘蛛也会被一起挡在门外。最常见的表现是:日志里长时间看不到蜘蛛,或者只看到一片 403、429,入口页几个月没有新的抓取记录。

先分清是“被拦”还是“没来”

这两种情况的处理方向完全不同。可以从日志形态和返回码入手:

  • 日志里完全没有蜘蛛记录,但外链和推送都正常,可能是 CDN 层就把请求挡掉了,源站根本没收到。
  • 日志里有大量 403、406、429、503,大概率是 WAF 或限速规则在起作用。
  • 日志里有请求,但返回的是验证码页或 JS 挑战页,说明触发了人机校验,蜘蛛拿不到正文。
  • 抓取频次突然从每天几百次掉到个位数,同时其他站点不受影响,多半是这台服务器或这个域名被单独限制了。

用 CDN 的话,记得同时看边缘节点的日志。很多时候源站日志干净得可疑,恰恰说明请求在到达源站之前就被处理掉了。

最容易误伤蜘蛛的几类配置

  • UA 黑名单写得太宽:把含 bot、spider、crawler 的字样一并封掉,正常蜘蛛也跟着中枪。
  • 限速按单 IP 计算:蜘蛛会从一个 IP 段并发抓取多个页面,很容易在短时间内触发阈值,被限速甚至临时封禁。
  • 地域封禁:只允许特定地区访问,但部分蜘蛛节点的出口 IP 归属地未必符合预期。
  • 强制跳转链条过长:HTTPS 跳转、加 www 跳转叠加,再在跳转环节插入校验,蜘蛛可能拿不到最终页面。
  • WAF 规则过严:URL 里带参数就被判为可疑请求,而入口页经常依赖参数化 URL。

配置上的几个实操点

  1. 按 IP 段放行,而不是只看 UA:Google 提供 ipranges 列表,Bing 也有对应的公开文件,百度、Yandex 等同样有官方说明。先按 IP 段放行,再用反向 DNS 做二次校验,比单纯认 UA 可靠得多。
  2. 给蜘蛛单独的限速通道:把校验通过的蜘蛛请求从通用限速里摘出来,或者在阈值上留出余量。
  3. 黑名单改成白名单思路:与其列举一堆要封的 UA,不如只放行确认过的蜘蛛,其余按普通流量处理。
  4. 减少对静态入口页的人机校验:验证码、JS 挑战、Cookie 校验这类机制对蜘蛛基本不友好。
  5. 改动前后留观察窗口:调整完规则后,至少观察几天的抓取日志再判断效果,不要当天就下结论。

放量之前,先做一轮小批量验证

新增入口站或更换 CDN、防火墙策略时,先拿一两个站跑几天,确认蜘蛛能稳定拿到正常响应,再把这套配置复制到其余站点。规模越大,配置出错的代价越高:一次误拦可能让整批入口站在一段时间内处于静默状态,而抓取频次的恢复,通常比下降慢得多。

把安全策略和抓取策略分开管理,是最省事的做法。安全规则面向普通流量,蜘蛛通道单独放行、单独观察,两者不要共用同一套阈值。