入口頁上量之後,很多人第一反應是加 CDN:蜘蛛来訪變多、回源压力大、担心服務器扛不住。這個思路本身没問题,但 CDN 會改變蜘蛛實际拿到的那份内容,如果配置没跟上,入口頁看起来活着,蜘蛛拿到的却可能是另一份東西。
加 CDN 之後,蜘蛛看到的到底是什么
没有 CDN 时,蜘蛛請求什么,源站就返回什么,鏈路短、可控。加了 CDN 之後,中間多了一层缓存,蜘蛛拿到的是缓存副本還是回源结果,取决于缓存键、TTL,以及邊缘节点上已经存在的那份副本。同一個 URL,在 A 节点可能命中缓存,在 B 节点可能回源,两邊内容如果不一致,蜘蛛在不同時間訪問就會看到不同版本。
缓存命中與回源的實际差別
- 命中缓存:响應快,但内容是上次回源时的快照,跳轉目标、頁面文案都可能是舊的。
- 回源:内容最新,但源站压力回到你身上,如果源站超时或返回 5xx,邊缘可能把错誤也缓存下来。
容易被忽略的几類問题
- 跳轉被缓存:入口頁原本指向 A,改成指向 B 之後,邊缘還留着 301 或 302 的舊响應,蜘蛛繼續按舊目标走。
- 错誤頁被缓存:源站短暂 502,被缓存成長期响應,蜘蛛连續几次都拿到错誤,回訪节奏自然受影响。
- UA 分流不一致:有些配置對蜘蛛 UA 單獨放行或單獨拦截,缓存键却没带上 UA,结果不同訪客拿到互相矛盾的版本。
- 地域回源差异:海外节点回源到國内源站超时,邊缘降級返回預設頁,蜘蛛看到的是一個空壳。
配置上值得固定的几個约定
- 入口頁這類會频繁調整的 URL,缓存 TTL 不要设太長,改動後主動刷新。
- 5xx、4xx 不要長時間缓存,错誤應该尽量透传。
- 如果确實對蜘蛛做了差异化處理,缓存键要把它包含進去,避免串味。
- 回源超时時間留足,別让邊缘因為几秒超时就返回兜底頁。
- 保留回源日誌,否則你只能看到邊缘的命中率,看不到蜘蛛真實請求了什么。
怎么確認蜘蛛看到的是哪一份
- 用常见蜘蛛 UA 直接請求入口頁,看响應头里的缓存命中标识。
- 再換一個节点或換一次解析,重复請求,比較两次响應是否一致。
- 對照源站訪問日誌,確認回源請求确實發生了,而不是全部被缓存挡住。
- 改動入口頁跳轉目标後,隔一段時間复查,確認舊跳轉已经不再返回。
哪些情况下不必上 CDN
入口頁本身是轻量静態頁、体积小、訪問量也不高的场景,加 CDN 带来的收益有限,反而多了一层排查成本。真正需要 CDN 的,通常是入口頁數量多、分布广、源站带宽或並發吃紧的时候。判断标准可以很简單:源站是不是已经成了瓶颈,如果是,再考虑;如果只是別人都加了,那先別加。
CDN 不會让蜘蛛更愿意来,它只是把你源站的内容更快地递出去。递出去的是不是你想要的那一份,才是關键。