蜘蛛池知识

蜘蛛池接入 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、防火墙策略时,先拿一两個站跑几天,確認蜘蛛能稳定拿到正常响應,再把這套配置複製到其余站点。規模越大,配置出错的代價越高:一次誤拦可能让整批入口站在一段時間内處于静默狀態,而抓取频次的恢复,通常比下降慢得多。

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