最近几天,服务器的监控面板频繁亮起红灯——4核8G的配置,CPU使用率竟然持续飙到100%,页面加载慢得像蜗牛,甚至偶尔会直接超时。作为一个小站站长,这种级别的资源占用显然不正常,于是我立刻开始了排查。
从日志里找到的“罪魁祸首”
第一步自然是翻服务器访问日志。果不其然,在密密麻麻的请求记录里,我发现了一堆重复出现的“特殊访客”。它们的User-Agent(用户代理)字段格外扎眼:
meta-externalagent
(Facebook相关爬虫)gptbot
(OpenAI的AI爬虫)claudebot
(Anthropic的AI爬虫)semrushbot
(SEO工具爬虫)- 还有
blexbot
、amazonbot
等一堆数据采集工具标识
这些爬虫的请求频率高得离谱:同一IP在几秒内连续发起几十次请求,目标页面集中在站点的内容页,而且完全无视 robots.txt 协议。更夸张的是,它们的请求时间几乎覆盖了全天,相当于服务器24小时被“轮番轰炸”,CPU不爆满才怪。
为什么这些爬虫如此“凶猛”?
仔细分析后发现,这些爬虫大多来自AI公司或数据服务商。比如GPTBot和Claudebot,本质是为训练大语言模型抓取全网内容;而SemrushBot这类工具,则是为SEO分析采集数据。它们的共同特点是:
- 请求量大:单IP并发数远超正常用户,甚至不做频率限制
- 无视规则:即使robots.txt明确禁止,仍会持续爬取
- 伪装性强:部分爬虫会模仿浏览器标识(比如带上Chrome版本号),但核心目的仍是批量抓取数据
对中小站点来说,这种级别的抓取毫无意义——既不会带来实际流量,又会消耗宝贵的服务器资源,堪称“数字寄生虫”。
拦截方案:用CDN快速止损
既然找到了问题根源,解决思路就很明确:直接拦截这些恶意爬虫的User-Agent。考虑到服务器本身已经负载过高,我选择通过CDN层面配置拦截规则,避免请求到达服务器时再消耗资源。
在CDN的WAF规则里,我添加了关键词拦截策略:只要请求的User-Agent中包含以下关键词,直接返回403禁止访问:
meta-externalagent
awariobot
blexbot
claudebot
amazonbot
barkrowler
semrushbot
gptbot
配置生效后不到10分钟,服务器CPU使用率从100%骤降到10%以下,页面加载速度立刻恢复正常。日志里也终于看不到那些密密麻麻的恶意请求了。
后续防护:不止于“拉黑”
虽然紧急拦截解决了问题,但长期来看,还需要补充几层防护:
- 限制IP请求频率:通过Nginx的limit_req模块,对单IP每秒的请求数设限(比如最多5次/秒),防止漏网的爬虫或新出现的标识绕过拦截
- 验证请求合法性:对可疑请求增加JS渲染检测(比如要求执行一段简单的JS代码),正常爬虫通常无法通过,而用户和合规搜索引擎不受影响
- 定期更新拦截列表:AI爬虫的标识层出不穷,需要定期检查日志,发现新的恶意User-Agent就及时加入黑名单
结语:中小站点更需要“主动防御”
这次事件让我深刻体会到,中小站点在面对网络爬虫时往往更脆弱。大型平台有足够的资源应对抓取,而我们的小服务器,可能被几个高频爬虫就拖垮。
与其被动等待服务器崩溃,不如主动监控日志、设置防护规则。毕竟,服务器的稳定运行,才是给真实用户提供良好体验的基础。
如果你也遇到了类似的问题,不妨从检查User-Agent开始——或许那些让服务器“罢工”的“元凶”,就藏在一行行日志里。