我们公司服务器日志里全是AI爬虫抓数据 请求量越来越大怎么办

昨天晚上十点多我还在公司加班,顺手看了一眼服务器日志,发现有几个陌生的IP段一直在疯狂请求我们的公开接口,抓取的内容基本是产品描述和用户评论。 一开始以为是正常爬虫,后来仔细看User-Agent里带了些大模型相关的关键词,估计是拿去训练AI了。我们之前加过robots.txt,但明显没用。 现在最担心的是公司一些还没公开的策略描述也被抓走了,万一被竞争对手拿去分析就麻烦了。想问问有没有简单有效的办法,能直接把这些爬虫挡掉,又不影响正常用户访问?

Viewed 2

昨天晚上十点多我还在公司加班,顺手看了一眼服务器日志,发现有几个陌生的IP段一直在疯狂请求我们的公开接口,抓取的内容基本是产品描述和用户评论。

一开始以为是正常爬虫,后来仔细看User-Agent里带了些大模型相关的关键词,估计是拿去训练AI了。我们之前加过robots.txt,但明显没用。

现在最担心的是公司一些还没公开的策略描述也被抓走了,万一被竞争对手拿去分析就麻烦了。想问问有没有简单有效的办法,能直接把这些爬虫挡掉,又不影响正常用户访问?

5 Answers

面对AI爬虫疯狂抓取公开接口,最直接有效的思路是在服务器前面加一层可实时调整的防护策略,而不是只靠 robots.txt。你可以用 Web 应用防火墙(WAF)的 Bot 管理功能,或在 Nginx/网关层配一套组合规则:User‑Agent 黑名单 + IP 信誉库 + 速率限制 + JavaScript 挑战,这样既能拦掉绝大多数训练数据采集,又不影响正常用户和搜索引擎。

从日志里把 AI 爬虫的特征抓出来

快速翻一下昨晚的日志,重点关注这几个字段:

  • User‑Agent 里是否包含 GPTBotCCBotBytespiderClaudebotPerplexityBotcohere‑ai 等关键词
  • 请求 IP 是否来自云计算/机房 IP 段(不同于普通家庭宽带)
  • 同一个 IP 是否在短时间内反复拉取大量页面,且不加载 JS/CSS/图片
  • 是否无视 robots.txt 甚至伪造正常浏览器 UA

把这些命中的 IP 和 UA 记下来,马上就能用。

最简单的三层拦截(按见效速度排)

手段 怎么做 优点 容易误伤的点
User‑Agent 黑名单 在 Nginx/CDN 上对含 GPTBotCCBot 等 UA 的请求直接返回 403 零成本秒生效 假 UA 容易绕过,无法作为唯一手段
IP 黑名单 + IP 信誉库 将日志里高频机房 IP 加入防火墙,或接入 Cloudflare 等免费 Bot IP 信誉库自动拦截 不用每次分析日志 必须持续更新,偶尔会误拦代理出口 IP
速率限制 + JS 挑战 单 IP 超过设定频次就弹出 CAPTCHA 或返回 503,配合前端注入 JS 验证是否为真实浏览器 对批量采集效果最好 某些合法 RSS 阅读器或监测工具会受影响

通常建议至少同时启用 UA 黑名单和速率限制,再针对重点接口开启 JS 挑战。

在 Nginx/OpenResty 上快速落地

  1. 限制公开接口的访问频率
    nginx.conf 中对敏感路径做限流,例如单 IP 每分钟最多请求 60 次,超过就返回 503 或弹验证页面。
  2. 拒绝已知 AI 爬虫 UA
    if ($http_user_agent ~* (GPTBot|CCBot|Bytespider|Claudebot)) {
        return 403;
    }
    
    务必把这部分代码放在 server 块最上方,避免后续规则消耗资源。
  3. 接入 Cloudflare 等 WAF 的 Bot 管理
    在 DNS 侧把域名解析到 Cloudflare,开启 “Bot Fight Mode” 或自定义规则,能直接挡掉一大部分已知 AI 爬虫,不需要自己维护 IP 库。

避免一刀切伤到正常流量

  • 保留搜索引擎白名单:对标有 GooglebotBingbotBaiduspider 等 UA 的请求放行,这些爬虫一般遵守 robots.txt 且有固定 IP 段可验证。
  • 为未公开策略内容加延迟屏障:对包含敏感业务策略的接口,添加一个 2~5 秒的异步加载延迟,普通用户无感,但爬虫会因超时放弃。
  • 监控误拦日志:每天检查 403/503 比率,如果正常用户访问失败率突然升高,迅速把限制阈值调宽。

这类技术防护需要根据爬虫行为不断迭代,但一开始把上述三层配上,就能把九成以上的非授权抓取挡在门外。如果服务器本身已经放在 CDN 后面,优先用 CDN 自带的 Bot 防护,成本最低且不用担心误伤搜索引擎。

我们公司之前也碰到过这种情况,后来直接在Nginx那边把那些UA带大模型关键词的IP段封了,再加了个简单的验证码前置,对正常用户几乎没影响。反正robots.txt就是个君子协议,流氓爬虫根本不看的。建议你也查下那几个IP段的归属,直接拉黑完事。

哎呀这个太常见了,最近我们公司也碰到过。robots.txt就是废纸,直接上频率限制+User-Agent黑名单吧。几个大模型的UA关键词网上搜一下都有列表,加个nginx规则能挡掉一大半。再不行套个Cloudflare,能抗不少恶意爬虫。别纠结,搞起来。

这种事真的烦,我也遇到过。建议你们在Nginx层按User-Agent或请求频率封掉那些明显是爬虫的IP,再配合一个简单的验证码机制,对正常用户影响不大。还有就是敏感接口加个临时token,爬虫很难自动获取。

楼上说得挺详细,我倒是想补充一点,既然robots.txt都没用,说明这些爬虫根本不遵守规则。可以试试结合行为分析,比如同一个IP短时间内多次请求某些接口就限制频率,或者用验证码验证可疑流量。还有,基于User-Agent简单封禁很容易绕过,得多维度判断。感觉这事没法完全堵死,只能把门槛调高点,至少让采集成本变高,竞争对手也不敢随便来。你们有没有考虑过用更严格的身份验证或者接口加密?我听说有些大厂把敏感接口挪到内部网络,公开接口只留必要部分,也可以参考参考。