现场是这样的。日志里同一秒出现两百条 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 网段的抓取没有受影响。
补一句。时间戳完全一致基本可以判定是脚本行为,真蜘蛛不会在同一毫秒发起两百个请求。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
