蜘蛛池知识

蜘蛛池入口頁的 WAF 與限流:誤拦搜尋引擎蜘蛛的常见配置

入口頁被自家 WAF 或限流誤拦,是蜘蛛池运营里比較隐蔽的問题:頁面不报错,蜘蛛却拿不到内容。本文梳理常见的誤拦配置——频率阈值、UA 匹配、JS 挑战、Referer 校驗與 IP 信誉库,给出確認方法和放行时的注意事項,並提醒 UA 白名單並不安全,規則要按路径拆分,改動後需要观察日誌再調整。

蜘蛛池知识

蜘蛛池入口頁的 WAF 與限流:誤拦搜尋引擎蜘蛛的常见配置

為什么入口頁容易被自家防護挡在门外

蜘蛛池的入口頁通常是公開可訪問的聚合頁:連結密集、參數多、来自同一批 IP 段的請求集中且規律。這些特征恰好和许多 WAF、限流、反爬規則想拦的“異常訪問”高度重合。于是後台看不到任何报错,服務器也没崩,只是在日誌里安静地多出一堆 403、429,蜘蛛的到訪记錄停在某一天。

這不一定是防護配置“错了”。多數預設規則是围绕真實攻击行為设計的,並没有把搜尋引擎蜘蛛的抓取习惯單獨区分出来。

几種常见的誤拦配置

1. 频率阈值设得過低

  • 單 IP 每分钟請求次數阈值
  • 同一 UA 的並發连接數上限
  • 單個 URL 短時間内被重复請求的次數

蜘蛛在發現新入口頁时往往會在一個時間段内集中抓取,尤其是入口頁刚被大量連結指向时。把阈值定在“每分钟 20 次”這類量級,很容易被触發。

2. UA 與請求特征匹配

部分規則库會把包含 python、curl、Java、Go-http-client 等特征串的 UA 直接拒绝;另一些則反過来,只放行带完整浏览器特征的請求。蜘蛛 UA 中带說明連結或版本号片段的情况並不少见,也可能被当成掃描器處理。

3. JS 挑战與驗證碼

一些 CDN 的“浏览器完整性检查”要求客戶端执行脚本才能拿到頁面。蜘蛛不會执行這類挑战,结果通常是 403、空白响應或一個不含正文的壳頁面。

4. Referer 與防盗鏈規則

资源防盗鏈影响不大,真正麻烦的是整頁級的 Referer 白名單。蜘蛛請求通常不带 Referer,一旦規則要求“必须来自本站”,入口頁就會被整体拦下。

5. 地域與 IP 信誉库

部分規則會拦截海外 IP 段,或统一拦截被标记為“資料中心”的 IP。而搜尋引擎蜘蛛的出口 IP 大多属于資料中心,這條規則容易造成誤伤。

怎么確認是不是被拦了

  1. 看日誌里的狀態碼分布:403、429、503 是否集中在蜘蛛 UA 上;
  2. 用官方工具驗證:Search Console 的網址检查、Bing 的抓取測試;
  3. 用命令行带真實蜘蛛 UA 請求一次,观察狀態碼和响應头;
  4. 換不同 UA 請求同一 URL,對比结果,判断是 UA 規則還是频率規則;
  5. 留意响應時間:限流往往先表現為 TTFB 升高,之後才出現 429。

放行时的几個注意点

只靠 UA 白名單並不安全,UA 可以伪造。更稳妥的做法是:對声称是蜘蛛的請求做反向 DNS 校驗,或直接使用搜尋引擎官方公布的 IP 段列表做白名單,同时保留原始訪問日誌,便于回溯。

  • 把入口頁從“强防護”路径中拆出来,與登入、後台、接口等路径分開配置;
  • 频率阈值按路径設定,入口頁可以放宽,寫操作接口保持嚴格;
  • 触發限流时返回 429 並带上 Retry-After,避免蜘蛛把站点判断為長期不稳定;
  • 不要用驗證碼拦所有訪客,蜘蛛拿不到頁面,入口頁等于不存在;
  • 規則改動後先观察一到两周的抓取日誌,再决定是否繼續收紧或放宽。
放行不等于放弃防護。關键是区分“人在看什么頁面”和“蜘蛛在取什么頁面”,把規則按路径和訪問角色分開,而不是全站一刀切。

一份可以照着走的排查清單

  1. 確認入口頁可被未登入、無 Cookie 的請求正常訪問;
  2. 检查是否有全站級 JS 挑战或人机校驗;
  3. 核對限流阈值與入口頁的實际請求特征是否匹配;
  4. 检查是否有基于 Referer、地域、IP 類型的拦截規則;
  5. 變更規則後持續观察狀態碼分布與抓取日誌,而不是改完就算。

WAF 與限流是入口頁比較容易踩的坑,因為它不报错、不崩溃,只是把蜘蛛挡在门外。定期核對响應狀態和抓取日誌,比事後排查省事得多。另外也要有心理预期:放行之後抓取表現未必立刻改變,URL 發現本身需要時間。