先看现象。服务器日志里 GPTBot 一天请求两万次,带宽和 CPU 都被拉高,正常用户的响应时间从 300 毫秒涨到两秒多。

排查方向其实有限,先把可能性排一排。模型训练爬虫不遵守 Crawl-delay,完全按自己的节奏抓。还有一种是站点没有针对该 UA 做任何限流。

还有一种情况,列表页和分页被无限翻抓,放大了请求量。

先统计该 UA 的请求占比与热点路径

grep -c 'GPTBot' access.log; grep 'GPTBot' access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head

接着按 UA 单独限速

limit_req_zone $http_user_agent zone=gpt:10m rate=1r/s;

剩下的就是确需屏蔽时只挡内容目录

User-agent: GPTBot

这类改动我都写进变更记录,过两周再出问题时能对上号。

我习惯把每一步的执行时间和结果记在一边,后面复盘省事。

改完先别撤,确认这几项。该 UA 的日均请求降到可控范围,站点平均响应时间回到正常水平,用户侧不再有明显卡顿。

补一句。训练爬虫和搜索爬虫是两套 UA,屏蔽 GPTBot 不会影响 Bing 和 Google 的收录,可以按需分开处理。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189