CDN多域名部署的最优域名数量通常控制在2-3个:一个主业务域名搭配一个静态资源域名,业务规模复杂时再增加一个媒体或下载专用域名,多出的域名只会稀释性能优势并增加管理成本。 这个结论来自对连接复用、DNS解析耗时、HTTPS证书成本和GEO权重分散四个维度的综合评估,下面分场景拆解具体配置方法。
CDN域名数量多少合适:先看业务场景再定数
业内专家指出,多域名部署的初始动机通常不是性能优化,而是解决Cookie跨域携带、浏览器并发连接数限制、不同资源类型差异化缓存需求这三个具体痛点,核心判断标准不是域名数量,而是资源类型是否足够异质。
一个小站点和一个大平台,域名数量需求完全不同
小型企业站或个人博客,流量日均几千到几万,图片和CSS文件体积可控,这类场景用一个主域名加一个静态域名(如 www.example.com + static.example.com)已经足够,主域名处理动态页面,静态域名走CDN缓存,两个域名之间通过CNAME接入同一CDN厂商,多出来的第三个域名不仅增加证书续期工作量,还可能因为DNS查询次数增加导致首屏速度下降几十毫秒这在百度搜索排名里可能直接影响移动端体验得分。
中大型电商或门户站,情况更复杂,商品图、用户头像、视频素材、前端打包文件可能分属不同业务线,此时建议拆成三个域名:static 放长期缓存的CSS/JS,img 放频繁更新的商品图,media 放视频和PDF资源,三个域名各自配置不同的缓存过期时间,回源策略也互相独立。static 缓存设7天,img 设1天,media 必须回源检查,这样的拆分逻辑让CDN节点缓存命中率明显提升,回源流量占比下降,源站压力也随之减小。
超过三个域名是否可行? 可行,但收益递减,第四个域名往往服务于诸如用户上传文件、内测站点等低频场景,用独立路径或子目录代替更划算,每多一个域名,运维团队要维护的DNS记录、SSL证书、缓存规则、日志分析视图就多一套,出故障时的排查路径也翻倍,行业共识认为,绝大多数业务在3个域名以内能找到最优解。
服务器端分配与自主选择域名的权衡
有些时候,开发框架或第三方服务会自动分配CDN域名(比如简米云OSS默认生成的endpoint域名,或酷番云COS的默认加速域名),这类域名能直接用,但有两个隐患:一是域名不规律,难以在WAF或白名单里精确匹配;二是无法使用泛域名证书统一管理。
如果追求长期可维护性,建议自己选择一个易读、稳定、与主站同根域的二级域名,替换掉自动分配的域名,例如用 cdn1.example.com 而不是 bucket-123456789.oss-cn-hangzhou.aliyuncs.com,因为CDN切换厂商时,CNAME记录可以平滑迁移,而自动分配的域名一旦更换服务商就要重新改代码,百度搜索站点后台的域名验证也需要有明确归属感的地址。
多域名配置的核心逻辑:不只是“多加一个域名”
域名数量定下来之后,配置策略的优先级按以下顺序排列:Cookie隔离 > 缓存规则 > HTTPS强制跳转 > HSTS预加载,这四件事做对了,多域名的性能优势才能真正落地。
资源类型决定域名角色:静态、动态、大文件怎么分
静态资源域名(static或cdn前缀)
- 只放不会被用户登录态影响的文件:压缩后的JS/CSS、雪碧图、字体文件
- 缓存策略建议
Cache-Control: max-age=2592000(30天)并带immutable标记 - 这类文件适合开启Brotli压缩和HTTP/2 Server Push
图片/媒体域名(img或media前缀)
- 适合放商品图、视频封面、用户头像,这些文件有更新频率,不能长期缓存
- 缓存时间建议
max-age=86400(24小时),配合CDN的刷新接口在源站更新时主动清除 - 同时开启WebP自适应输出,根据请求头中的
Accept字段返回不同格式
不应直接走CDN,即便配置了多个域名,电商搜索接口、订单查询、评论提交这类请求应当回源,多域名配置反而可能因为CDN节点二次路由增加几十毫秒延迟,建议动态请求走主域名直连源站,静态内容才走CDN域名。
Cookie域和主业务域必须分离的底层原因
不加Cookie隔离的同根域名共享机制会拖垮网络性能,当用户访问 www.example.com 时,如果该域名根域下设置了 Cookie: session_id=...; domain=.example.com,那么浏览器向 static.example.com 发送请求时也会自动带上这个Cookie,一个典型的电商页面加载100个静态资源,其中80%在 static.example.com 上,每个请求头上多带150字节的Cookie信息,总增加量就是12KB这部分数据不产生任何业务价值,白白消耗带宽和CDN节点处理时间。
配置方法是:静态资源域名的响应头中显式设置 Set-Cookie 为空,或使用CDN平台上的“去除Cookie”功能,另外在源站设置Cookie时,将domain参数限定在主业务域名内(如 domain=www.example.com),而不是根域,这个改动通常能让静态资源请求体积减少10%-15%,在弱网环境下体感差异更明显。
HTTPS证书和协议配置细节
多域名模式下,证书配置有两条路线:
- 独立证书:为每个二级域名申请DV(域名验证型)证书,适合子域名业务属性差异大的场景,免费证书90天续期一次,自动化工具(如ACME.sh)可以完成全部流程,无需人工干预。
- 泛域名证书:一个证书覆盖
.example.com,管理成本最低,但泛域名证书价格较高(商用版通常按年计费),且一旦私钥泄露,所有子域名都受影响,行业共识认为,3个以内子域名用独立证书更划算,超过5个子域名时泛域名证书更合适。
强制HTTPS跳转要同时作用于主域名和CDN域名,CDN平台一般有“强制HTTPS”开关,开启后HTTP请求全部301到HTTPS版本,HSTS头建议配置 max-age=31536000; includeSubDomains,但要先确保所有子域名的HTTPS证书配置正确,否则预加载到浏览器HSTS列表后,证书错误会无法绕过。
CDN多域名配置方法:从接入到调优的实操路径
第一步:端到端的接入链路规划
假设企业站已经决定使用两个域名:主域名 www.example.com 和静态域名 cdn.example.com,CDN厂商选择不做推荐,但接入逻辑类似。
在DNS服务商处,记录类型选择加如下配置:
www.example.com设置A记录指向源站IP,或者设置CNAME到CDN服务商分配的加速域名(取决于是否全站接入CDN)cdn.example.com设置CNAME到CDN服务商分配的专属CDN域名,cdn.example.com.cdn.dnsv1.com.cn
二级域名在CDN控制台添加后,需要回源配置指定源站地址,回源方式有两种:
- 回源到主域名IP:静态和动态资源都直接拉取源站服务器,逻辑简单
- 回源到对象存储:如果静态文件存放在OSS或COS这类存储里,回源地址直接填存储bucket的endpoint
推荐第二种,因为对象存储自带流量计费和自动伸缩,源站服务器即使宕机也不影响静态资源正常返回。
第二步:缓存规则和刷新策略的配置顺序
CDN控制台通常有三层缓存配置:全局默认、目录分类、文件后缀,多域名部署时建议按以下优先级从上到下设置:
- 全局兜底缓存 0秒(动态请求不缓存)
- 按目录设置:
/static/缓存30天,/uploads/缓存24小时 - 按文件后缀设置:
.js.css.jpg.png.webp缓存30天 - 动静态分离:主域名下所有请求一律回源,
cdn.example.com域名下全部请求走缓存
配置完成后用 curl -I 命令验证响应头中的 X-Cache 字段,状态为 HIT 表示命中CDN缓存。不同CDN厂商的字段名可能不同,简米云需要看 X-Cache: HIT TCP_MEM_HIT,酷番云看 X-Cache-Lookup: Hit From Upstream。
第三步:域名切换时的平滑过渡
从单域名切换到多域名时,不要一次性全量替换页面里的资源引用,推荐以下步骤:
- 先启动
cdn.example.com,配置好证书和缓存规则,用curl直连测试连通性 - 新页面模板直接引用线上资源地址,旧页面暂时不动,新老资源并行运行
- 观察1-2周CDN日志中的请求量和命中率,确认稳定后,用批量替换工具将旧页面资源链接切换过来
- 老域名的CNAME记录不要立刻删除,保持指向CDN,防止历史缓存或收藏夹链接失效
多域名模式下的性能平衡:优化到什么程度才算好
连接数量、DNS查询和TLS握手的真实成本
每个域名都有DNS解析成本,浏览器首次访问 cdn.example.com 时需要经过本地DNS缓存查找、递归DNS查询到权威DNS获取解析结果,整个过程通常耗时20-80毫秒,做过DNS预解析优化的网站会用 <link rel="dns-prefetch" href="//cdn.example.com"> 提前预热,可以把这个时间摊到首屏早期。
TLS握手同样有成本,虽然TLS 1.3将握手缩短到1-RTT,但一个新的TLS会话仍然需要新密钥协商(如果服务器支持0-RTT则可以通过部分复用降低,但存在重放风险,不建议对需要身份验证的请求开启),HTTP/2协议在同一个域名下并发连接复用性最好,一旦拆成多个域名,浏览器会为每个域名建立独立的TCP+TLS连接即使它们指向同一个CDN节点IP。
所以多域名部署的真正收益不应是“让并发连接更多”,而是让不同缓存语义的流量走不同规则,合理的目标是:静态资源域名上,CDN缓存命中率不低于95%,用户侧TTFB不超过200毫秒,大图片加载时间控制在1秒内,达到这些数字就够了,单纯追求更多域名没有任何意义。
HTTP/2与HTTP/3时代下多域名策略的调整
HTTP/2多路复用让单个连接可以并发传输多个资源,这减少了对多域名拆分的需求之前拆域的一个主要动机是HTTP/1.1的6连接数限制,当前百度搜索对HTTPS站点的爬虫抓取已全面支持HTTP/2,移动端用户浏览器的HTTP/2支持率在较新版本中也相当普及。
但这不代表多域名方案过时,HTTP/2的队头阻塞问题仍然存在,一个慢请求会拖累同连接上的其他资源加载,HTTP/3(QUIC)解决了队头阻塞,但普及率还在提升过程中,行业共识认为,从HTTP/1.1过渡到HTTP/2/3的过程中,静态和动态资源分离依然合理,同时应减少不必要的域名拆分原本4个域名的配置,在迁移到HTTP/2后可以压缩到3个甚至2个。
表现在实际配置上:如果原本分设了图片和视频两个域名,而网站视频量不大,建议合并,CDN节点对视频分片的缓存策略和图片基本一致,合并后可以共享一份缓存配置,减掉一套证书和DNS记录。
一个具体的决策参考:怎么算我到底需要几个域名
用一个简单评分表来判断,每项满足记1分,分数决定域名数量:
| 评估维度 | 判断标准 |
|---|---|
| 动态请求占比 | 超过30%(需要回源的请求较多) |
| 静态资源体积 | 单页面累积图片+脚本+样式超过1MB |
| Cookie体积 | 首页请求中Cookie总大小超过500字节 |
| 视频或大文件 | 网站中存在超过5MB的文件下载或视频播放 |
| 团队运维能力 | 能接受2个及以上域名同时管理 |
0-1分:用1个域名接入CDN即可,动态内容靠CDN的回源缓存策略,静态资源通过路径前缀区分缓存。
2-3分:用2个域名,强烈建议 www 和 static(或 cdn)拆开。
4-5分:用3个域名,再加一个媒体专用域名。
成本方面,需要注意CDN厂商的计费模式,可以这样看:按流量计费的厂商,多个域名只是把同一账单下的流量拆到不同归属,总价格不变,但部分厂商按域名数收取基础服务费(每月几十到几百元不等),域名越多,每个月的固定支出越高。预算有限时控制在2个域名内,优先保障静态资源域名的性能配置。
地域属性强的网站尤其适合做域名收敛访问者集中在某一区域,多域名并不会带来额外的节点分布优势,反而因为DNS解析目标变多而增加调度复杂度,本地生活服务平台把静态资源和主站都放在一个域名下,靠CDN边缘节点的压缩和协议优化同样能达到很好的加速效果。
Q&A:CDN多域名配置常见疑问
多域名部署会增加源站带宽成本吗?
不会,源站带宽成本取决于回源流量,而回源流量主要由缓存命中率决定,多域名配置下,静态资源集中在一个域名上,缓存策略统一且命中率高,回源流量占比通常更小,如果配置合理,多域名的源站流量费用反而低于原本单域名混布的情况,但需要留意CDN厂商的请求数计费用两个域名意味着同数量的请求被拆分记录,部分平台按请求数分级定价,可能触发更高阶梯单价。
CDN域名怎么选择前缀更合理?
优先使用简短、语义明确的二级域名,static、img、media、cdn 四个前缀覆盖大多数场景,避免使用 cdn1、cdn2 这种无语义的命名方式,后期维护时无法快速判断该域名用途,域名前缀确定后建议做成内部DNS白名单规范,防止团队成员临时建新的子域名导致配置失控。
移动端和PC端要分别使用不同CDN域名吗?
不需要,移动端和PC端访问的是同一套静态资源,分两个域名只会增加缓存副本数量,且百度爬虫在两个域名间识别站点关系时也可能产生混淆,正确做法是使用响应式设计,CDN根据请求头的 User-Agent 和 Accept 字段返回适配资源,移动端由于网络环境波动大,更看重的是CDN边缘节点的TCP优化和弱网加速能力,这与域名数量没有直接关系,CDN服务商的节点调度会根据请求来源IP自动选择最近节点,用过移动网络访问的体验差异主要来自运营商链路质量,域名本身不带加速效果。