先看现象。服务器日志里 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 的收录,可以按需分开处理。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。