站点运营

站点运营:訪問频率限制自查,別把正常訪客和蜘蛛一起拦在门外

限流規則往往是临时加上去的,上线後就没人回看。本文從阈值维度、白名單、User-Agent 匹配、拦截狀態碼几個角度梳理訪問频率限制的自查要点,並给出灰度調整顺序與上线後该盯的指标,帮助站点在被大量抓取时减少對正常訪客和搜尋蜘蛛的誤伤。

站点运营

站点运营:訪問频率限制自查,別把正常訪客和蜘蛛一起拦在门外

很多站点在被大量抓取之後,第一反應是加限流:封 IP、限频率、上驗證碼、開 WAF。這些手段本身没問题,問题在于規則往往是临时拍脑袋定的,上线之後没人回头驗證。结果就是恶意抓取只降了一部分,正常訪客和搜尋蜘蛛却被一起挡在门外。

限流誤伤通常有哪几種表現

  • 訪客在高峰期频繁看到驗證碼或 403,反馈集中在固定时段。
  • 搜尋蜘蛛抓取量在某個時間点断崖式下跌,但服務器负载並没有明顯變化。
  • 移動網絡用戶比宽带用戶更容易被拦,因為运营商出口 IP 是共享的。
  • 公司内網、监控探针、合作方接口調用開始报错。

自查要看的几個配置点

阈值是按什么维度算的

按 IP 限速最简單,也最容易誤伤。同一個出口 IP 背後可能是几百個真實用戶。如果條件允许,把統計维度換成會话、帳號或接口 token,IP 只作為兜底。

白名單是否覆盖了必要的来源

搜尋引擎蜘蛛的 IP 段會更新,寫死一份多年前的列表基本等于没寫。更稳妥的做法是反向解析加前向解析互相驗證,再配合已知的 User-Agent 做交叉校驗。同时別忘了把自己的监控探针、CDN 回源节点、合作伙伴調用加入白名單。

User-Agent 規則是否過宽

用關鍵詞匹配 UA 很容易连坐。比如屏蔽含 “bot” 的請求,會顺手把一些正常工具、阅讀器、甚至部分搜尋蜘蛛的變体一起挡掉。規則越宽,誤伤面越大,寫規則时要能说清每一條针對的具体行為。

拦截返回的是什么狀態碼

返回 403、429 還是 200 的空頁面,對蜘蛛的含义完全不同。429 提示對方放慢速度,403 可能被理解為長期不可訪問。至少要让狀態碼和真實意图保持一致,別让临时限流被当成永久封禁。

怎么区分正常蜘蛛和恶意抓取

單看 UA 不够,建议结合三類信息:来源 IP 的反向解析结果;請求行為,比如是否遵守 robots、是否並發拉取全部列表頁、是否只盯着搜尋结果頁和篩選參數;以及訪問路径分布。行為異常但 UA 正常的請求多半是伪装,UA 可疑但行為温和的可以先观察,不必立刻封禁。

封禁前先做一次全量记錄:把命中規則的請求原样寫進日誌,跑两三天再决定要不要真正拦截。這一步能省掉大部分事後排查的時間。

調整限流时的操作顺序

  1. 先记錄,後拦截。让規則處于观察模式,只打标记不阻断。
  2. 按影响面從小到大灰度,先對一個非核心栏目或一條线路生效。
  3. 观察 24 到 48 小时,重点看蜘蛛抓取量、错誤率、訪客跳出情况。
  4. 没有明顯副作用再扩大范围,同时保留一键回滚的開關。
  5. 把規則内容、生效時間、负责人寫進运维记錄,避免下次改版时互相冲突。

上线之後该看哪些指标

  • 服務器日誌里各狀態碼的占比變化,尤其是 403、429、503。
  • 搜尋後台的抓取統計與索引量趋势,確認没有異常下滑。
  • 訪客端關键路径的成功率,比如註冊、下單、提交表單。
  • CDN 與源站的缓存命中率,確認限流没有把缓存策略带偏。

限流本质上是在“防滥用”和“別挡人”之間找平衡,没有一次配置就一劳永逸的方案。把它当作一個需要定期回看的运营項,比單纯把阈值調高更管用。