抓取统计里其他响应占 8%,按时间点去日志里翻,几乎全是 429,源站的限流规则刚上线一周。

一开始怀疑是「限流按 UA 分桶,蜘蛛被分到最低一档」,查了一圈,方向不对。

这类报错背后常见的原因有几处,逐个排除就行。限流按单 IP 设得太紧,蜘蛛突发抓取就被拒。少数情况下是CDN 把 429 缓存了几分钟,重试也拿不到正常页。

少数情况下是抓取统计不单列 429,全归到其他。

第一件事是按小时统计 429 的分布

awk '$9==429 {print substr($4,2,14)}' access.log | sort | uniq -c

给蜘蛛单独放宽限流

map $http_user_agent $limit_key { default $binary_remote_addr; ~*Googlebot ""; }

命中限流时返回 503 并给出重试时间

limit_req_status 503; add_header Retry-After 120;

末了确认 CDN 不缓存 429

curl -sI https://www.example.com/post/1024

改之前先确认了最近有没有人动过配置,避免白查一遍。

别只看报错消失,验证要多做一步。调整后 429 在日志里基本消失,其他类回落到 1% 以内,抓取量恢复到限流前的水平。

这里还有个坑。429 会让蜘蛛直接降频,比 503 更伤,真要限流优先用 503 带上重试时间。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189