限流不是蜘蛛池的對立面
蜘蛛池入口頁的價值在于被搜尋引擎蜘蛛發現,並沿着連結繼續抓取。很多站点在接入入口頁後,會顺手给它加上限流、並發控制和 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,比直接断開连接更友好,蜘蛛會根據這個時間自行調整节奏。入口頁如果和主站共用服務器,建议單獨划分资源或做總量控制,避免互相影响。限流規則上线後,至少观察一到两周的訪問日誌,再决定是否調整。規則不是一次设定就不變的,随着入口頁數量和抓取量的變化,阈值也需要跟着复核。