站点运营

站点运营:爬虫拦截自查,别让防火墙把正常蜘蛛和访客一起挡在门外

安全加固之后抓取量下滑,很多时候不是内容问题,而是服务器层把蜘蛛拦了。这篇讲怎么排查 WAF、限流和 UA 规则造成的误伤,以及白名单、观察期和记录该怎么落地,让拦截策略既挡得住攻击,也不误伤正常访问。

站点运营

站点运营:爬虫拦截自查,别让防火墙把正常蜘蛛和访客一起挡在门外

给站点做一轮安全加固之后,经常会出现一种很别扭的情况:页面没动、内容照常更新,但服务器日志里蜘蛛的来访次数明显少了。很多人第一反应是去查收录、查内容质量,其实问题很可能出在服务器层——防火墙、WAF 或者限流规则把正常蜘蛛一起挡掉了。

为什么这件事容易被忽略

robots.txt 是明面上的规则,改了什么、拦了谁,打开文件就能看见,也容易回滚。而服务器层的拦截往往分散在几个地方:CDN 后台、Nginx 配置、面板自带的安全插件、云厂商的防护策略。它们通常由运维或一键开启,生效之后不报错,也不影响你自己用浏览器访问,表现只是抓取量悄悄下滑,所以很难第一时间联想到。

更麻烦的是,这类误伤通常是「一段时间内全部 403」或者「高峰期才被限流」,比全站宕机隐蔽得多。

常见的误伤场景

  • 按 User-Agent 关键词粗暴拦截。规则里写了 bot、spider、crawl 之类的关键词,本意是挡扫描器,结果搜索引擎蜘蛛的 UA 里正好带这些词,一并被拦。
  • 频率限制过严。蜘蛛抓取往往是并发请求,如果限流阈值按「单个访客一分钟几次」来设,很容易触发临时封禁,返回 429 或 503。
  • 整段封禁 IP。为了挡某个来源的骚扰,直接把一整个 IP 段拉黑,而蜘蛛的部分出口 IP 恰好落在这个段里。
  • 人机校验铺得太广。全站或大范围启用验证码、JS 挑战,普通用户能过,蜘蛛过不去。
  • 规则只改了一半。在 CDN 层放行了蜘蛛,源站的 Nginx 或安全插件还留着旧规则,请求到了源站照样被拒。

怎么确认是不是被拦了

不要凭感觉下结论,按下面这个顺序走一遍,基本能定位到是哪一层的问题。

  1. 先从服务器访问日志里看蜘蛛的返回码分布,重点看有没有成片的 403、429、503,以及是不是集中在某几个时间段。
  2. 把日志里出现的蜘蛛 IP 做一次反向解析,确认它到底属不属于官方公布的 IP 段,别把伪造 UA 的扫描器当成蜘蛛。
  3. 在服务器上直接发请求做对比:同一台机器、同一个 URL,分别带普通 UA 和蜘蛛 UA 各请求一次,看返回是否一致。
  4. 检查 CDN、WAF、主机面板的拦截日志或安全事件列表,很多产品会把触发规则和命中次数列出来。
  5. 挑一到两个具体 URL 复现,而不是只看总量趋势。总量受很多因素影响,具体 URL 的表现更直接。

处理时守住几条原则

  • 白名单优先于黑名单。能用放行官方蜘蛛 IP 段解决,就不要靠改 UA 规则去绕。
  • 区分限流和封禁。限流是降低频率,封禁是直接拒绝,两者的影响完全不同。对蜘蛛更适合用较宽松的限流而不是封禁。
  • 改完留观察期。调整之后至少要观察一段时间的日志和抓取数据,确认返回码恢复正常,别改完就当结束了。
  • 别用封 IP 解决内容问题。如果某个 IP 频繁来抓,先想想是不是自己站内出现了大量可遍历的 URL,而不是先加黑名单。

把规则记成一份可复用的清单

拦截规则散落在多个系统里,最容易出问题的就是「谁在什么时候改了什么」。建议维护一份简单记录,包含:规则内容、生效位置(CDN / 源站 / 面板)、开启时间、放行对象、验证方式。下次抓取量再出现波动时,先翻这份记录,比重新排查一遍快得多。

安全加固的目标是挡住恶意流量,不是把站点变成一个只有真人能进的封闭空间。拦截策略上线前,多想一步「这会不会连带影响到蜘蛛和普通访客」,能省掉后面很多来回排查的时间。

小结

爬虫拦截自查不需要多高深的技术,关键在于把它当成一个固定动作:定期看一眼日志里的返回码分布,确认白名单还在、规则没被覆盖。抓取量下滑时,先排除服务器层的拦截,再去谈内容和结构,往往能少走很多弯路。