限流不是蜘蛛池的对立面
蜘蛛池入口页的价值在于被搜索引擎蜘蛛发现,并沿着链接继续抓取。很多站点在接入入口页后,会顺手给它加上限流、并发控制和 WAF 规则,本意是防止被恶意爬取或压垮服务器。问题在于,这些规则往往和蜘蛛的抓取节奏直接冲突:规则太紧,蜘蛛拿不到几个页面就走了;规则太松,机器资源又扛不住。所以限流的关键不是开或关,而是把阈值定在合适的位置,并且明确它对谁生效。
需要关注的几个限流维度
- 并发连接数:同一 IP 同时保持的连接数量,限制过严会让蜘蛛只开一两个连接慢慢抓。
- 单位时间请求数(QPS):最常被设置的阈值,通常按秒或按分钟统计。
- 连接间隔:两次请求之间的最小间隔,设置过大会拉长整站抓取周期。
- 带宽与响应体积:限制单连接速度会拉长首字节时间,间接影响蜘蛛的抓取节奏。
- UA 与来源识别规则:只按 User-Agent 放行,容易误伤,也容易被绕过。
阈值怎么定更稳妥
- 先看历史日志,统计蜘蛛请求的自然峰值 QPS,作为基准。
- 把放行阈值设在峰值的 2 到 3 倍,给突发抓取留出余量。
- 对已确认的搜索引擎 UA 单独设一条放行规则,避免和普通访客共用同一套阈值。
- 对 HTML 入口页适当放宽,对图片、脚本等静态资源可以更宽松。
- 对同一 IP 的高频异常请求保留限速,但不要把整个 IP 段一封了之。
被误拦时的排查方向
如果日志里开始出现大量 403、429,或者蜘蛛的访问量突然掉到接近零,先别急着加资源,按下面的顺序看一遍:
- UA 白名单是否只匹配了不完整的字符串,导致完整 UA 反而匹配不上。
- 是否按 IP 段做了封禁,而蜘蛛的出口 IP 恰好落在里面。
- 是否启用了需要执行 JavaScript 的验证页面,蜘蛛通常不会执行。
- 多个入口页是否共用同一台机器,总量限制被彼此挤占。
几个常见误区
- 把限流当成防采集的万能手段,结果真正需要抓取的蜘蛛也一起被挡。
- 只依赖 UA 判断,忽略 UA 可以随意伪造这一事实。
- 设完阈值就不再看日志,实际效果和预期相差很远也无从察觉。
限流的目的是让资源分配更可控,而不是把访客挡在门外。对入口页来说,能稳定响应已知蜘蛛的请求,比拦住所有可疑请求更重要。
一点运维建议
返回 429 时带上 Retry-After,比直接断开连接更友好,蜘蛛会根据这个时间自行调整节奏。入口页如果和主站共用服务器,建议单独划分资源或做总量控制,避免互相影响。限流规则上线后,至少观察一到两周的访问日志,再决定是否调整。规则不是一次设定就不变的,随着入口页数量和抓取量的变化,阈值也需要跟着复核。