把静态文件、接口请求交给CDN,把业务程序放在独立源站,是常见的部署方式。问题不在于“分开”本身,而在于CDN与源站配合是否完整。如果只修改域名解析,却没有同步访问控制、缓存规则和回源参数,就可能出现源站被绕过、用户拿到旧内容,甚至登录状态失效等问题。
因此,CDN与源站配合应被视为一套整体配置,而不是两个互不相关的系统。
一、源站地址暴露,CDN可能形同虚设
最直接的隐患是源站地址泄露。比如网站使用内容域名接入CDN,但应用后台、错误页面、邮件通知或历史DNS记录中仍出现真实源站地址。攻击者一旦直接访问源站,就可以绕过CDN的限速、访问控制和安全策略。
这还会带来两个后果:一是源站承受全部连接压力,二是管理员难以判断请求究竟来自CDN还是外部客户端。仅仅隐藏域名并不等于隐藏源站,网络层仍需限制来源。
可执行的处理步骤
- 为源站设置独立地址,仅让业务团队和必要的运维系统知晓。
- 在源站防火墙或安全组中,仅放行CDN公布的回源地址段;地址段变化时要及时复核。
- 检查应用日志、邮件模板、错误页和历史解析记录,删除不必要的源站地址。
- 保留一个受保护的运维入口,不要用同一个公网入口同时承担管理和回源。
二、缓存规则不一致,用户可能看到错误内容
CDN缓存的是响应结果,而源站控制的是业务数据。两边规则不一致时,常见现象包括商品价格已经更新,页面仍显示旧价格;用户退出账号后,浏览器或边缘节点仍返回旧页面;文件替换后,部分地区继续加载原版本。
这里的关键是缓存键。若缓存键只包含路径,却忽略查询参数、语言标识或必要的请求头,多个本应不同的响应可能被当成同一个对象。反过来,如果把大量无关参数纳入缓存键,命中率会下降,回源请求和成本都会上升。
CDN与源站配合时,应先区分公共内容和个性化内容。带有账户信息、购物车或权限结果的页面通常不适合直接缓存;带版本号的图片、字体和前端资源则更适合设置较长缓存时间。

三、鉴权和请求头被错误处理
不少系统把登录校验放在应用层,却忘记确认CDN是否转发必要请求头。假设接口依赖Authorization、Cookie或自定义签名字段,而CDN在回源时删除、改写或缓存了相关请求,可能出现用户被错误拒绝,也可能把某个用户的响应错误提供给其他人。
另一个风险是只在源站判断“请求来自CDN”,却没有继续验证用户身份。这样只能证明请求经过了边缘节点,不能证明请求者有权访问具体资源。
处理时应将公开资源、登录接口和管理接口分开配置:公开资源使用明确的缓存规则;动态接口默认不缓存,或仅缓存经过严格设计的公共响应;权限判断始终在源站完成。对于签名URL,还要明确签名有效期、路径范围和失效方式。
四、协议、主机名和证书设置不匹配
CDN与源站配合还涉及两段连接:用户到CDN,以及CDN到源站。前端访问正常,并不代表回源连接一定正确。常见问题包括源站只接受一个主机名、证书不包含回源域名、边缘节点使用的协议与源站监听方式不一致。
配置时应确认三项内容:回源时使用的主机名、源站证书覆盖的名称,以及源站实际监听的端口。若源站根据主机名选择站点,还要确认CDN是否发送了正确的Host值。多个站点共用一个源站时,这一步尤其重要,否则可能返回默认站点页面。
五、故障切换和缓存刷新容易失效
源站切换到备用机房后,CDN可能仍保存旧的回源地址、错误响应或过期对象。若只修改源站配置,没有同步边缘节点的缓存刷新和健康检查,部分用户仍会看到故障页面。
建议建立明确的发布流程:
- 先验证主源站和备用源站返回内容、状态码及关键响应头是否一致。
- 再配置健康检查路径,检查应包含应用可用性,而不是只判断端口是否开放。
- 切换后按资源类型刷新缓存;大范围刷新应避开访问高峰,并关注回源压力。
- 恢复主源站后不要立即全量切回,先用少量流量确认错误率和响应时间。
六、如何建立一份联合检查清单
上线前可以把CDN与源站配合检查拆成四组:网络层检查源站是否只接受必要来源;缓存层检查缓存键、缓存时间和缓存刷新;应用层检查身份信息、状态码和重定向;运维层检查日志中的边缘请求标识、回源耗时和故障切换记录。
测试时至少准备匿名用户、已登录用户、无权限用户和不存在资源四类请求,分别验证响应是否串用。还应使用带不同查询参数的请求,确认参数确实会按业务需要影响缓存结果。对于发布频繁的站点,给静态文件增加内容版本标识,通常比反复依赖全量缓存刷新更稳妥。
常见问题
1. 源站必须完全禁止公网访问吗?
不一定,但应限制为CDN回源地址和必要的运维来源。若业务有特殊接入方式,应单独设置规则,不宜让所有公网地址自由访问。
2. 动态接口能不能使用CDN缓存?
可以,但必须确认响应与用户身份无关,并准确设计缓存键和失效机制。涉及账户、订单或权限结果的接口通常应默认不缓存。
3. 只修改DNS就能完成接入吗?
不能。DNS只负责引导请求,源站访问控制、回源主机名、证书、缓存和日志规则仍需同步配置。
4. 如何判断问题来自CDN还是源站?
对比边缘响应时间、回源耗时、状态码和请求标识,并分别直接验证受控源站。不要只根据浏览器页面是否能打开来判断。
归根结底,CDN与源站配合的重点不是把两个地址连通,而是让网络限制、缓存逻辑、身份校验、协议设置和故障流程保持一致。只有完成这层联动,分离部署才能带来性能和稳定性收益,而不会留下容易被忽视的隐患。


