给蜘蛛池的入口站挂 CDN、开 WAF,本来是为了挡住扫描器和恶意爬虫,但配置稍微粗放一点,搜索引擎蜘蛛也会被一起挡在门外。最常见的表现是:日志里长时间看不到蜘蛛,或者只看到一片 403、429,入口页几个月没有新的抓取记录。
先分清是“被拦”还是“没来”
这两种情况的处理方向完全不同。可以从日志形态和返回码入手:
- 日志里完全没有蜘蛛记录,但外链和推送都正常,可能是 CDN 层就把请求挡掉了,源站根本没收到。
- 日志里有大量 403、406、429、503,大概率是 WAF 或限速规则在起作用。
- 日志里有请求,但返回的是验证码页或 JS 挑战页,说明触发了人机校验,蜘蛛拿不到正文。
- 抓取频次突然从每天几百次掉到个位数,同时其他站点不受影响,多半是这台服务器或这个域名被单独限制了。
用 CDN 的话,记得同时看边缘节点的日志。很多时候源站日志干净得可疑,恰恰说明请求在到达源站之前就被处理掉了。
最容易误伤蜘蛛的几类配置
- UA 黑名单写得太宽:把含 bot、spider、crawler 的字样一并封掉,正常蜘蛛也跟着中枪。
- 限速按单 IP 计算:蜘蛛会从一个 IP 段并发抓取多个页面,很容易在短时间内触发阈值,被限速甚至临时封禁。
- 地域封禁:只允许特定地区访问,但部分蜘蛛节点的出口 IP 归属地未必符合预期。
- 强制跳转链条过长:HTTPS 跳转、加 www 跳转叠加,再在跳转环节插入校验,蜘蛛可能拿不到最终页面。
- WAF 规则过严:URL 里带参数就被判为可疑请求,而入口页经常依赖参数化 URL。
配置上的几个实操点
- 按 IP 段放行,而不是只看 UA:Google 提供 ipranges 列表,Bing 也有对应的公开文件,百度、Yandex 等同样有官方说明。先按 IP 段放行,再用反向 DNS 做二次校验,比单纯认 UA 可靠得多。
- 给蜘蛛单独的限速通道:把校验通过的蜘蛛请求从通用限速里摘出来,或者在阈值上留出余量。
- 黑名单改成白名单思路:与其列举一堆要封的 UA,不如只放行确认过的蜘蛛,其余按普通流量处理。
- 减少对静态入口页的人机校验:验证码、JS 挑战、Cookie 校验这类机制对蜘蛛基本不友好。
- 改动前后留观察窗口:调整完规则后,至少观察几天的抓取日志再判断效果,不要当天就下结论。
放量之前,先做一轮小批量验证
新增入口站或更换 CDN、防火墙策略时,先拿一两个站跑几天,确认蜘蛛能稳定拿到正常响应,再把这套配置复制到其余站点。规模越大,配置出错的代价越高:一次误拦可能让整批入口站在一段时间内处于静默状态,而抓取频次的恢复,通常比下降慢得多。
把安全策略和抓取策略分开管理,是最省事的做法。安全规则面向普通流量,蜘蛛通道单独放行、单独观察,两者不要共用同一套阈值。