搜尋抓取

CDN 缓存與蜘蛛抓取:回源、缓存失效和内容版本不一致的排查

不少站点把 CDN 当成纯加速工具,却忽略了搜尋蜘蛛也是通過這些邊缘节点取頁面的。缓存命中率、回源策略、刷新时机和频控規則,都會改變蜘蛛實际看到的内容。本文按抓取路径梳理缓存版本不一致、回源慢導致超时、誤拦蜘蛛等問题,並给出一條可执行的排查顺序。

搜尋抓取

CDN 缓存與蜘蛛抓取:回源、缓存失效和内容版本不一致的排查

很多站点把 CDN 当成單纯的加速工具,配置好缓存規則就不太管了。但搜尋蜘蛛取頁面时,走的也是這些邊缘节点:請求先落到离它最近的机房,命中缓存就直接返回,没命中才回源。也就是说,蜘蛛看到的版本、等待的時間、甚至能不能拿到内容,都會受缓存與回源策略影响。

蜘蛛拿到的,是邊缘节点上的那一份

源站内容更新之後,邊缘节点不一定同步更新。如果缓存時間设得偏長,蜘蛛在缓存有效期内訪問,讀到的仍是舊頁面。對普通内容頁影响不算大,但下面几種情况值得注意:

  • 頁面标题、正文或價格做過實质修改,缓存未刷新,蜘蛛记錄的還是舊版本;
  • 已下线的 URL 缓存未清理,邊缘繼續返回 200 和舊内容,蜘蛛無法確認頁面已不存在,會反复回訪;
  • 列表頁、聚合頁更新频繁,却沿用了内容頁的長缓存,蜘蛛多次訪問看到同一份快照。

判断方法不复杂:在本地或服務器上用命令行請求该 URL,對比邊缘返回與源站直连返回是否一致,重点看缓存命中相關的响應头。

回源慢,表現出来就是抓取超时

邊缘节点没有内容时,會向源站發起回源請求。如果源站响應偏慢,或者回源鏈路不稳定,蜘蛛在邊缘侧等到的就是一個迟迟不返回的响應,最终以超时結束。日誌里常见的形式是连接已经建立,但迟迟没有完整响應体,容易被誤判成源站故障,實际瓶颈可能在回源环节。

可以留意的信号:同一批 URL 的超时是否集中出現在缓存刚刷新之後、流量高峰时段,或者集中在某類需要實时回源的頁面上。如果是,優先看回源耗时和源站並發承载,而不是先改頁面。

缓存刷新的方式與节奏

多數 CDN 都支持按 URL、按目錄或按标簽刷新。小站点按 URL 精确刷新够用;内容量大、發布频繁的站点,更适合把刷新動作接進發布流程,做目錄級或标簽級刷新,减少遗漏。

刷新之後最好確認一次邊缘返回的是新版本,再把新的入口連結放出去。否則蜘蛛顺着新入口過来,仍然可能讀到舊内容,形成新的版本差。

別把正常抓取当成攻击

CDN 通常自带频控、CC 防護和 WAF。蜘蛛的訪問往往集中且並發偏多,很容易被規則命中,返回 403、503 或者一個驗證頁。這时候站点看起来没报错,抓取量却悄悄下降。

處理思路是按官方公布的蜘蛛 IP 段做白名單放行,而不是只凭 User-Agent 判断,因為 UA 是可以伪造的。放行范围不要過宽,避免给真實攻击留下口子。

一條可以照着走的排查顺序

  1. 用命令行請求目标 URL,確認邊缘返回與源站直连是否一致;
  2. 對比响應头里的缓存命中與回源信息,判断内容来自缓存還是源站;
  3. 检查是否有缓存未刷新或防護規則拦截了蜘蛛請求;
  4. 核對刷新時間與内容發布時間,看是否存在時間差;
  5. 再回到抓取統計里,看異常是否集中在某類頁面或某個時間段。
抓取出問题,不一定是源站的問题。邊缘节点同样是這條路径上的一個變量。

把 CDN 纳入抓取自查范围

站点运营里,CDN 的配置往往在技術侧一次做好就長期不動,而内容却在持續變化。建议在發布流程里固定两步:内容變更後刷新對應缓存,下线頁面时同步清理缓存。同时定期確認防護規則没有誤伤正常抓取。這两件事做稳,蜘蛛看到的版本才和用戶看到的一致,抓取路径也不容易被無谓的 403、超时打断。