现场是这样的。日志里同一秒出现两百条 Googlebot 请求,时间戳精确到毫秒且完全一致,抓取量一周翻了五倍,可 robots 和 sitemap 这段时间根本没动过。

中间走过弯路,把「日志采集端批量写入,时间戳被统一成入库时间」当成主因,改完现象没变。

真正麻烦的地方在于,几个原因的现象几乎一样。有人用压测工具伪造 UA 回放请求,请求并非来自真蜘蛛;CDN 把边缘的批量请求合并后集中回源,源站看到同一时刻;定时任务并发拉取同一批 URL,UA 设成了 Googlebot。

第一件事是看同一毫秒请求的 IP 是否相同

awk '{print $4,$1}' access.log | sort | uniq -c | sort -rn | head

反查可疑 IP 的 PTR 记录

Resolve-DnsName 203.0.113.10 -Type PTR

然后对非官方网段直接限速

limit_req_zone $binary_remote_addr zone=bot:10m rate=5r/s;

末了核对官方 IP 段避免误杀

curl -s https://developers.google.com/static/search/apis/ipranges/googlebot.json | Select-String "66.249"

恢复的判定其实很直接。伪造请求被限速后日志回落到日均水平,官方 Googlebot 网段的抓取没有受影响。

补一句。时间戳完全一致基本可以判定是脚本行为,真蜘蛛不会在同一毫秒发起两百个请求。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189