蜘蛛池知识

蜘蛛池入口頁加了 CDN 之後:蜘蛛拿到的是缓存還是回源

入口頁數量上来後加 CDN 很常见,但 CDN 會改變蜘蛛實际拿到的内容。本文讲清缓存命中與回源的区別,列出跳轉被缓存、错誤頁被缓存、UA 分流不一致等常见問题,给出配置约定、驗證步骤,以及哪些情况下不必上 CDN。

蜘蛛池知识

蜘蛛池入口頁加了 CDN 之後:蜘蛛拿到的是缓存還是回源

入口頁上量之後,很多人第一反應是加 CDN:蜘蛛来訪變多、回源压力大、担心服務器扛不住。這個思路本身没問题,但 CDN 會改變蜘蛛實际拿到的那份内容,如果配置没跟上,入口頁看起来活着,蜘蛛拿到的却可能是另一份東西。

加 CDN 之後,蜘蛛看到的到底是什么

没有 CDN 时,蜘蛛請求什么,源站就返回什么,鏈路短、可控。加了 CDN 之後,中間多了一层缓存,蜘蛛拿到的是缓存副本還是回源结果,取决于缓存键、TTL,以及邊缘节点上已经存在的那份副本。同一個 URL,在 A 节点可能命中缓存,在 B 节点可能回源,两邊内容如果不一致,蜘蛛在不同時間訪問就會看到不同版本。

缓存命中與回源的實际差別

  • 命中缓存:响應快,但内容是上次回源时的快照,跳轉目标、頁面文案都可能是舊的。
  • 回源:内容最新,但源站压力回到你身上,如果源站超时或返回 5xx,邊缘可能把错誤也缓存下来。

容易被忽略的几類問题

  • 跳轉被缓存:入口頁原本指向 A,改成指向 B 之後,邊缘還留着 301 或 302 的舊响應,蜘蛛繼續按舊目标走。
  • 错誤頁被缓存:源站短暂 502,被缓存成長期响應,蜘蛛连續几次都拿到错誤,回訪节奏自然受影响。
  • UA 分流不一致:有些配置對蜘蛛 UA 單獨放行或單獨拦截,缓存键却没带上 UA,结果不同訪客拿到互相矛盾的版本。
  • 地域回源差异:海外节点回源到國内源站超时,邊缘降級返回預設頁,蜘蛛看到的是一個空壳。

配置上值得固定的几個约定

  • 入口頁這類會频繁調整的 URL,缓存 TTL 不要设太長,改動後主動刷新。
  • 5xx、4xx 不要長時間缓存,错誤應该尽量透传。
  • 如果确實對蜘蛛做了差异化處理,缓存键要把它包含進去,避免串味。
  • 回源超时時間留足,別让邊缘因為几秒超时就返回兜底頁。
  • 保留回源日誌,否則你只能看到邊缘的命中率,看不到蜘蛛真實請求了什么。

怎么確認蜘蛛看到的是哪一份

  1. 用常见蜘蛛 UA 直接請求入口頁,看响應头里的缓存命中标识。
  2. 再換一個节点或換一次解析,重复請求,比較两次响應是否一致。
  3. 對照源站訪問日誌,確認回源請求确實發生了,而不是全部被缓存挡住。
  4. 改動入口頁跳轉目标後,隔一段時間复查,確認舊跳轉已经不再返回。

哪些情况下不必上 CDN

入口頁本身是轻量静態頁、体积小、訪問量也不高的场景,加 CDN 带来的收益有限,反而多了一层排查成本。真正需要 CDN 的,通常是入口頁數量多、分布广、源站带宽或並發吃紧的时候。判断标准可以很简單:源站是不是已经成了瓶颈,如果是,再考虑;如果只是別人都加了,那先別加。

CDN 不會让蜘蛛更愿意来,它只是把你源站的内容更快地递出去。递出去的是不是你想要的那一份,才是關键。