蜘蛛池知识

蜘蛛池入口頁抓取異常:先排查 CDN 與 WAF

入口頁搭好却等不到蜘蛛,問题常常不在頁面本身,而在前面的 CDN 或 WAF。本文按源站、CDN 日誌、防護策略的顺序梳理常见拦截表現與排查方法,包括 UA 白名單、频率阈值、缓存污染這些容易踩的坑,帮你把抓取異常定位到具体环节。

蜘蛛池知识

蜘蛛池入口頁抓取異常:先排查 CDN 與 WAF

很多人在搭好入口頁之後,第一件事就是去看蜘蛛有没有来。结果訪問日誌里只有零星几條,或者干脆一條都没有,但用浏览器打開又是正常的。這種情况里,相当一部分原因不在入口頁本身,而在它前面挡着的那一层:CDN、WAF 或者云厂商自带的安全防護。

為什么會被拦

這類防護产品的預設策略是「像人的才算正常訪問」。蜘蛛的請求恰好有几個特征容易被判成異常:UA 固定、訪問频率高、路径集中、没有 Referer、不执行 JS、不加载图片和 CSS。對防護系統来说,這和采集脚本的行為高度相似,于是被顺手拦掉。

常见的拦截表現

  • 返回 403、405 或 503,源站日誌里根本查不到這條請求;
  • 返回一個 JS 挑战頁或驗證碼頁,蜘蛛拿不到實际内容;
  • 只放行了部分蜘蛛 IP,另一些直接超时;
  • 回源正常,但 CDN 缓存里存的是错誤頁,後續請求全部命中缓存;
  • 首字节時間拉得很長,蜘蛛等不到响應就断開。

排查顺序

  1. 先绕過 CDN,用源站 IP 直接請求一次入口頁,確認源站本身返回正常。
  2. 分別看 CDN 日誌和源站日誌。CDN 有记錄、源站没有,問题基本就在防護策略上。
  3. 用蜘蛛 UA 發一次請求,看返回的是内容頁、403 還是挑战頁。只看 UA 不够,要结合請求来源 IP 一起看。
  4. 检查速率限制規則。單 IP 每秒几次、單 URL 每分钟几次這類阈值,對正常用戶宽松,對蜘蛛往往偏紧。
  5. 检查是否開了「人机校驗」「JS 挑战」「Cookie 驗證」這類預設開關。
  6. 確認回源 IP 段是否被源站防火墙放行,有些配置會把 CDN 回源当成異常来源。

配置上的几個做法

白名單不要只寫 UA

UA 可以伪造,所以多數防護产品不會只看 UA,反過来只靠 UA 放行也容易被绕過。更稳的做法是把已知的蜘蛛 IP 段和反向解析一起用上,同时保留基本的频率限制,避免整套策略形同虚设。

频率阈值留出余量

蜘蛛抓取往往是突發式的,可能几分钟内连来几十次,然後安静很久。阈值设成「每秒一次」這種硬限制,很容易在突發时被拦。可以改成按分钟或按小时統計,给一個相對宽松的上限。

留一條备用通道

如果主域名前面挂了嚴格的防護,可以把入口頁放到另一個未接防護的子域或源站上,做交叉驗證。主域抓取異常时,至少能判断是防護問题還是入口頁本身的問题。

需要提醒的是,為了放行蜘蛛而把整套防護規則關掉,並不是個好選擇。防護的目的是過滤異常流量,規則全關之後,入口頁本身也更容易被其他脚本盯上。

两個容易忽略的点

  • 缓存污染:错誤頁一旦被 CDN 缓存,蜘蛛後續再来命中的還是缓存。清理缓存並調整缓存規則,通常比反复改入口頁更有效。
  • 換 IP 後没同步:蜘蛛池換了出口或回源 IP,防護白名單没跟着更新,表現就是「昨天還好好的,今天全没了」。

入口頁抓不到,按「源站 → CDN 日誌 → 防護策略 → 蜘蛛侧」的顺序倒着查一遍,通常比直接去改入口頁模板更快定位。日誌和實际返回是唯一可靠的依據,別凭感觉判断。