入口页上量之后,很多人第一反应是加 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 不会让蜘蛛更愿意来,它只是把你源站的内容更快地递出去。递出去的是不是你想要的那一份,才是关键。