蜘蛛池知识

蜘蛛池入口頁被 WAF 誤拦:判断、放行與复核

蜘蛛池入口頁上了 CDN 或 WAF 之後抓取量突然下滑,很多时候不是内容出了問题,而是蜘蛛請求在邊缘就被拦住了。本文讲怎么從防護日誌與源站日誌的差异、响應碼分布判断是否誤拦,為什么應该按官方 IP 段而不是 UA 放行,放行时速率和缓存要怎么單獨配置,以及放行後需要复核的几項指标,减少一邊放行一邊繼續流失抓取的情况。

蜘蛛池知识

蜘蛛池入口頁被 WAF 誤拦:判断、放行與复核

為什么蜘蛛會被拦在入口頁之外

蜘蛛池入口頁刚上线时抓取正常,某天換了 CDN 厂商、加了 WAF,或者服務器迁到云防護後面,抓取量就掉了。很多人第一反應是内容被降權,其實更常见的情况是請求根本没到達源站——防護层在邊缘就把蜘蛛拒了。對搜尋引擎蜘蛛来说,它看到的只是一次 403、一次 503,或者一個需要执行 JavaScript 才能通過的驗證頁面,除了重试之外没有別的反馈。

  • UA 黑名單誤伤:不少防護預設規則會把带 spider 字样的 UA 当成掃描器。
  • IP 信誉库把机房 IP 段整体标记為高風險。
  • 單 IP 請求频率触發限流。
  • 對所有訪客開啟了 JS 挑战或驗證碼。
  • 只放行部分地区的訪問,蜘蛛出口不在其中。
  • 防護层把错誤的 403 响應缓存了下来。

怎么判断是誤拦,而不是内容問题

先看响應碼和日誌

把 CDN 或 WAF 的訪問日誌和源站的訪問日誌放在一起比對,是最直接的办法。如果防護日誌里能看到蜘蛛 UA 或官方 IP 段的請求,而源站日誌里對應的记錄是空的,說明請求在邊缘就被處理掉了,压根没落到源站。再對照响應碼:连續大量 403、406、429、503,或者返回 200 但内容是一段挑战脚本,都指向拦截。

用官方渠道交叉驗證

各搜尋引擎的站長平台一般都有抓取诊断或抓取測試工具,可以模拟蜘蛛從外部發起請求。如果工具里顯示抓取失敗、超时或被拒绝,而你在本地浏览器訪問同一個 URL 一切正常,基本可以確認防護层按来源做了区分。同时核對蜘蛛的真實 IP 段——查一下该搜尋引擎官方公布的 IP 列表,拿它跟防護日誌里的来源 IP 對一遍,還能顺带区分真蜘蛛和伪造 UA 的采集器。

放行时按什么维度更靠谱

優先按 IP 段,而不是 UA

UA 是最容易伪造的字段,只按 UA 放行,等于同时给一批伪装的采集程序開了门。相對稳妥的做法是把官方公布的蜘蛛 IP 段加進白名單,並且定期更新——搜尋引擎的 IP 段會變。如果防護支持,再叠加一次反向 DNS 校驗,確認来源 IP 确實归属于對應搜尋引擎。放行范围尽量收窄到入口頁所在的域或目錄,不要顺手把整站都放開。

速率限制和缓存要單獨設定

放行不等于放任。给白名單單獨设一档速率上限,既能保證抓取通道顺畅,也不至于让防護彻底失效。另外注意缓存策略:如果防護层把 403 或挑战頁缓存了,即使後面放行,返回的仍是舊响應。放行之後清理一次相關缓存,並確認蜘蛛請求不會被强制跳轉到某個驗證頁面。

放行之前先记錄目前的抓取量和响應碼分布,否則放行後拿不到可以對比的基线資料。

放行之後要复核什么

  1. 蜘蛛請求是否落到源站:看源站日誌里来自官方 IP 段的請求量有没有回升,而不只是看防護层的請求數。
  2. 响應碼分布:403、503 是否下降,200 的比例是否上升;如果 200 上升但抓取量没變,可能是速率限制還在起作用。
  3. 抓取到的内容是否正常:確認蜘蛛拿到的是完整 HTML,而不是骨架屏、跳轉頁或空内容,啟用了前端渲染的入口頁尤其要检查。
  4. 有没有伪造流量混入:放行後如果日誌里出現大量非官方 IP 段、UA 却寫着蜘蛛名字的請求,說明白名單開得太宽,需要收回。

几個容易踩的坑

  • 只按 UA 放行,结果把伪装采集器一起放進来。
  • 規則只寫在外层 CDN,内层 WAF 或源站的規則没同步,請求到中間又被拦一次。
  • 換了 CDN 或 WAF 厂商之後没有重新核對白名單,舊規則不在新平台上。
  • 為了蜘蛛關掉驗證碼或 JS 挑战,顺手把整站的防護都降級了。
  • 只看“抓取量”不看“落到源站的量”,把防護层的命中当成有效抓取。

防護和抓取不是非此即彼。把白名單、速率、缓存這三件事分開配置,再留一份可對比的基线資料,大多數誤拦都能在几天内定位清楚。至于抓取量恢复之後能不能轉化為收錄,那是另一個环节的事,蜘蛛池本身能解决的只是“被看见”這一段。