很多站点在被大量抓取之后,第一反应是加限流:封 IP、限频率、上验证码、开 WAF。这些手段本身没问题,问题在于规则往往是临时拍脑袋定的,上线之后没人回头验证。结果就是恶意抓取只降了一部分,正常访客和搜索蜘蛛却被一起挡在门外。
限流误伤通常有哪几种表现
- 访客在高峰期频繁看到验证码或 403,反馈集中在固定时段。
- 搜索蜘蛛抓取量在某个时间点断崖式下跌,但服务器负载并没有明显变化。
- 移动网络用户比宽带用户更容易被拦,因为运营商出口 IP 是共享的。
- 公司内网、监控探针、合作方接口调用开始报错。
自查要看的几个配置点
阈值是按什么维度算的
按 IP 限速最简单,也最容易误伤。同一个出口 IP 背后可能是几百个真实用户。如果条件允许,把统计维度换成会话、账号或接口 token,IP 只作为兜底。
白名单是否覆盖了必要的来源
搜索引擎蜘蛛的 IP 段会更新,写死一份多年前的列表基本等于没写。更稳妥的做法是反向解析加前向解析互相验证,再配合已知的 User-Agent 做交叉校验。同时别忘了把自己的监控探针、CDN 回源节点、合作伙伴调用加入白名单。
User-Agent 规则是否过宽
用关键词匹配 UA 很容易连坐。比如屏蔽含 “bot” 的请求,会顺手把一些正常工具、阅读器、甚至部分搜索蜘蛛的变体一起挡掉。规则越宽,误伤面越大,写规则时要能说清每一条针对的具体行为。
拦截返回的是什么状态码
返回 403、429 还是 200 的空页面,对蜘蛛的含义完全不同。429 提示对方放慢速度,403 可能被理解为长期不可访问。至少要让状态码和真实意图保持一致,别让临时限流被当成永久封禁。
怎么区分正常蜘蛛和恶意抓取
单看 UA 不够,建议结合三类信息:来源 IP 的反向解析结果;请求行为,比如是否遵守 robots、是否并发拉取全部列表页、是否只盯着搜索结果页和筛选参数;以及访问路径分布。行为异常但 UA 正常的请求多半是伪装,UA 可疑但行为温和的可以先观察,不必立刻封禁。
封禁前先做一次全量记录:把命中规则的请求原样写进日志,跑两三天再决定要不要真正拦截。这一步能省掉大部分事后排查的时间。
调整限流时的操作顺序
- 先记录,后拦截。让规则处于观察模式,只打标记不阻断。
- 按影响面从小到大灰度,先对一个非核心栏目或一条线路生效。
- 观察 24 到 48 小时,重点看蜘蛛抓取量、错误率、访客跳出情况。
- 没有明显副作用再扩大范围,同时保留一键回滚的开关。
- 把规则内容、生效时间、负责人写进运维记录,避免下次改版时互相冲突。
上线之后该看哪些指标
- 服务器日志里各状态码的占比变化,尤其是 403、429、503。
- 搜索后台的抓取统计与索引量趋势,确认没有异常下滑。
- 访客端关键路径的成功率,比如注册、下单、提交表单。
- CDN 与源站的缓存命中率,确认限流没有把缓存策略带偏。
限流本质上是在“防滥用”和“别挡人”之间找平衡,没有一次配置就一劳永逸的方案。把它当作一个需要定期回看的运营项,比单纯把阈值调高更管用。