阿里云 OSS 绑定自定义 CDN 域名,需要依次处理域名归属、OSS 回源、DNS CNAME、HTTPS 和缓存规则。域名在哪家购买并不重要,记录要添加到当前的权威 DNS。CNAME 生效后,还要检查证书、源站内容和重复 GET 的缓存状态。

腾讯云 DNSPod、阿里云 CDN 与阿里云 OSS 组成的跨云图片访问链路图
DNSPod 只负责返回 CNAME;浏览器随后连接阿里云 CDN,缓存未命中时才会访问 OSS。

用 NS 确认权威 DNS

TXT 和 CNAME 应添加到 NS 查询返回的权威 DNS:

dig +short example.com NS

返回 DNSPod 的名称服务器,就在 DNSPod 添加记录;返回 Cloudflare、阿里云或其他服务商,就去对应控制台。

选择加速区域

创建 CDN 域名前,先确认用户主要在哪个地区。根据阿里云 CDN 添加加速域名文档(在新标签页打开),截至 2026 年 9 月 2 日,仅选择中国内地以外区域时不要求 ICP 备案;选择中国内地或全球加速时,需要满足中国内地备案要求。

服务商规则可能调整,实际添加域名时应以控制台提示和最新官方文档为准。

图片、字体、CSS、JavaScript 等公开静态资源适合放进这条链路。后台接口、用户私有文件和带身份信息的内容,不能直接套用相同的公开缓存规则。

用 TXT 证明域名归属

首次添加根域下的加速域名时,阿里云可能给出一条 TXT:

主机记录:verification
记录类型:TXT
记录值:verify_一段唯一值

把这条记录原样添加到权威 DNS,再查询完整名称:

dig +short verification.example.com TXT

返回值要与控制台提供的内容完全一致。主机名被重复拼接、复制时多了空格,或者记录类型选错,都会让归属验证失败。阿里云域名归属验证说明(在新标签页打开)列出了控制台支持的验证方式。

把 OSS Bucket 设为源站

在阿里云 CDN 中添加 images.example.com,源站填写 Bucket 的公网 OSS 域名:

bucket-name.oss-cn-hangzhou.aliyuncs.com

不要填对象的完整 URL,也不要把 CDN 分配的 CNAME 反过来当作源站。

公共读 Bucket 可以直接提供公开对象;私有 Bucket 需要使用阿里云支持的 OSS 私有回源鉴权。长期 AccessKey 不应该出现在网页、仓库或公开日志里。

域名刚创建时,阿里云可能仍在下发配置。遇到“域名正在配置”或 ServiceBusy,先等状态完成再继续,不要反复创建同一个域名。

在 DNSPod 添加阿里云给出的 CNAME

阿里云会为加速域名分配一个目标,形式可能类似:

images.example.com.w.kunlunsl.com

在 DNSPod 为主机记录 images 添加 CNAME。这个名称原来如果有 A、AAAA 或另一个 CNAME,先确认旧记录的用途,不能直接覆盖。

dig +short images.example.com CNAME

查询结果与阿里云给出的目标一致,说明别名已经生效。CNAME 的同名冲突和根域限制见 DNS 记录怎么选

给 CDN 域名配置 HTTPS

证书必须覆盖 images.example.com。可以使用阿里云证书服务,也可以上传其他受信任 CA 签发的证书。

openssl s_client -connect images.example.com:443 \
  -servername images.example.com </dev/null

curl -sS -I http://images.example.com/path/image.webp
curl -sS -I https://images.example.com/path/image.webp

网站本身使用 HTTPS 时,图片地址也必须使用 HTTPS,否则浏览器会把它当作混合内容。HTTP 是否跳转到 HTTPS,则按 CDN 控制台中的跳转策略决定。

缓存时间要跟文件更新方式匹配

文件名带内容指纹,例如 app.4f31a2.jscover.91ac8d.webp,内容变化时 URL 也会变化,适合长缓存。经常覆盖同名文件时,缓存时间要更短,或者每次更新后主动刷新 CDN。

内容常见做法
带内容指纹的图片、字体、JS、CSS长缓存,可使用 immutable
不带指纹、偶尔覆盖的图片较长缓存,更新后刷新 CDN
HTML短缓存或不缓存
私有文件不公开缓存,使用鉴权或签名 URL
404、5xx谨慎缓存,避免临时错误长期留在边缘

阿里云缓存过期时间文档(在新标签页打开)建议根据资源更新频率设置 TTL。

同一个 CDN 文件第一次请求缓存未命中并回源,第二次请求命中边缘缓存的流程图
连续请求同一个 URL,才能看出边缘节点是否已经保存了对象。

跨域加载字体、Canvas 读取图片或前端直接请求对象时,还要设置准确的 CORS 响应头。不要在允许携带凭证的同时放开任意来源。

验证回源对象和缓存命中

先用源站域名和 CDN 域名请求同一个对象,比较文件内容:

curl -sS -o /tmp/origin.bin \
  'https://bucket-name.oss-cn-hangzhou.aliyuncs.com/path/image.png'

curl -sS -o /tmp/cdn.bin \
  'https://images.example.com/path/image.png'

shasum -a 256 /tmp/origin.bin /tmp/cdn.bin

哈希一致,说明 CDN 没有回到错误的 Bucket 或对象。随后对 CDN 地址连续发起两次真实 GET:

curl -sS -D - -o /dev/null \
  'https://images.example.com/path/image.png'

curl -sS -D - -o /dev/null \
  'https://images.example.com/path/image.png'

第一次常见 X-Cache: MISS,第二次可能变成 X-Cache: HIT。同时查看 Cache-ControlAgeETag,才能区分“经过 CDN”和“已经命中缓存”。阿里云 CDN 生效检查说明(在新标签页打开)给出了响应头的判断方式。

images.stackonward.com 在 2026 年 9 月 1 日接入时,同一个公开 PNG 对象的源站与 CDN ETag 一致,连续两次 GET 从 MISS TCP_MISS 变为 HIT TCP_MEM_HIT。这只能说明该对象和当时命中的边缘节点正常,其他文件类型仍要分别抽样。

按响应现象排查

现象常见原因
TXT 一直未通过主机名重复拼接、值多了空格、记录尚在缓存
CNAME 查询正确但 HTTPS 报错证书未覆盖域名,或证书仍在下发
CDN 返回 404,OSS 可以打开源站 Bucket、回源 Host 或对象路径不一致
连续请求仍然 MISS响应不可缓存、缓存键变化、规则未生效或节点不同
网站更新后仍显示旧图同名文件被长缓存,需要刷新或改用新 URL
字体或 Canvas 被浏览器拦截CORS 响应头不符合当前来源

先抽样,再替换全站图片地址

先挑几张不同类型的文件接入新域名,确认 HTTPS、文件哈希、缓存和跨域行为都正常,再逐步替换其他链接。旧 OSS 地址至少保留到回滚窗口结束。

如果 CDN 域名还在配置中,或者只有 CNAME 正确但证书和回源尚未可用,提前替换全站链接会把一个局部问题放大成整站图片故障。

常见问题

OSS 自定义域名一定要接 CDN 吗?

不一定。只需要品牌化访问域名时,可以使用 OSS 支持的自定义域名;需要边缘缓存、访问加速和统一 HTTPS 策略时,再接 CDN。

域名在腾讯云,OSS 在阿里云,可以配置吗?

可以。先确认当前权威 DNS,再把阿里云提供的 TXT 和 CNAME 值添加到该 DNS。服务商不必相同。

没有 ICP 备案可以用阿里云 CDN 吗?

按阿里云当前规则,仅使用中国内地以外加速区域时不要求 ICP 备案;中国内地或全球加速需要满足备案要求。接入时要重新核对官方说明。

CNAME 生效后为什么还是 MISS?

第一次访问、缓存键不同、响应不可缓存、规则正在下发或请求落在不同边缘节点,都可能产生 MISS。连续请求完全相同的 URL,并同时检查 Cache-ControlAgeETag 和缓存状态。

怎样确认 CDN 没有回错 Bucket?

用源站域名和 CDN 域名请求同一路径,比较状态码、长度、ETag 和文件 SHA-256。内容一致后再替换站内链接。