本文介绍使用 CDN 加速 OSS 资源时常见的问题及解决方案,涵盖加速验证、HTTPS 部署、私有 Bucket 回源、缓存策略、图片处理与视频截帧、防盗链配置等场景。
如何校验已成功使用 CDN 加速 OSS?
第一步:检查 CNAME 记录
以阿里云 DNS 为例,登录 DNS 管理控制台,选择公网权威解析,单击域名右侧的解析设置。
查看 CDN 加速域名(如
oss.example.com)对应的 CNAME 记录(如oss.example.com.w.kunlunaq.com)是否已成功添加,状态为启用。
第二步:通过 nslookup 命令验证域名是否指向了 CDN 节点
打开 cmd 程序(Windows)、终端(macOS / Linux)。
输入
nslookup -type=CNAME 加速域名,如果返回的解析结果和 CDN 控制台上该加速域名的 CNAME 值一致,则表示 CDN 加速已经生效。
如果还未配置 CNAME,参见配置 CNAME。
OSS 私有 Bucket 如何使用 CDN 加速?
如果加速域名的源站为私有 Bucket,需为加速域名开启OSS私有Bucket回源实现通过 CDN 加速 OSS 私有 Bucket 资源。
开启私有 Bucket 回源功能后,可以通过 CDN 加速域名访问私有 Bucket 内的所有资源,原 URL 的私有鉴权方式将失效。可配合使用 CDN 提供的 Referer 防盗链功能、URL 鉴权功能保护资源不被盗刷,更多信息参见配置Referer黑/白名单和配置URL鉴权。
CDN 加速 OSS 场景下如何部署 HTTPS 证书?
CDN 加速 OSS 场景下,仅需在 CDN 上部署 HTTPS 证书,详情参见配置HTTPS证书。
如果证书由阿里云数字证书管理服务(原 SSL 证书)托管,也可以通过数字证书管理服务控制台部署,详情参见部署 SSL 证书到阿里云产品。
访问返回 403 Forbidden
排查方向:
查看页面错误信息,如果出现
You don't have permission to access the URL on this server或You are forbidden to list buckets,并附带denied by IP ACL = not in whitelist(被 IP 规则中的白名单拦截)等错误信息,可根据错误信息快速定位被拦截的策略。如果只出现
You don't have permission to access the URL on this server且无对应拦截信息,请检查 CDN 中 URL 鉴权和远程鉴权。
某域名图片调用不成功且提示无权限访问:
检查私有 Bucket 回源开关:登录 CDN 控制台,进入目标域名的域名管理,确认已开启阿里云 OSS 私有 Bucket 回源。若未开启,CDN 无权限访问 OSS 私有资源,会导致 403 错误。
检查 Referer 黑白名单配置:进入目标域名的,确认请求的 Referer 是否在白名单中。若被 Referer 规则拦截,请将目标 Referer 加入白名单。
如果已配置 OSS 静态页面托管功能,且首页指定的文件(如 index.html)或 Bucket 的权限为私有,需要开启OSS私有Bucket回源功能。之后通过 CDN 配置 URL 重写规则,将访问 URL 重写为指向配置的首页文件(如 index.html)。CDN 节点将通过 302 重定向的方式使客户端请求 index.html 的内容,实现静态页面托管功能,详细配置参见重写访问URL。配置方法:待改写的 Path 配置为 ^/$,目标 Path 配置为 /index.html,执行规则 选择 Redirect。
CDN 加速 OSS 场景下为什么开启 CDN 后感觉访问更慢了?
CDN 加速 OSS 场景下,客户端使用加速域名访问资源时,首次访问的请求先到达 CDN 节点。由于此时 CDN 节点还未缓存资源,CDN 节点将访问 OSS 获取资源并缓存至 CDN 节点,后续对该资源的请求将从 CDN 节点直接返回给客户端。因此第一次访问时,可能比未配置 CDN 加速时慢。
可通过 CDN 的预热功能将 OSS 资源提前缓存至 CDN 节点,客户端首次请求资源时即可直接从 CDN 节点获取,无需再回源站获取,操作步骤参见刷新和预热资源。
CDN 回源 OSS 频率高如何设置缓存策略?
如果未配置缓存过期时间或配置的缓存时间不合理,可能导致高频的 CDN 回源操作,增加回源至 OSS 的流量及相关费用,并可能降低访问速度。可以根据业务实际情况配置缓存过期时间:
不常更新的静态文件(如图片、应用安装包等),建议设置 1 个月以上。
频繁更新的静态文件(如 JS、CSS 等),根据实际业务情况设置。
更多信息参见配置URL鉴权。
CDN 加速 OSS 场景下 OSS 文件刷新后如何确保用户访问到最新的资源?
在 OSS 上修改文件后,如果希望 CDN 节点缓存自动刷新,可以提供客户端访问修改后的内容,可以前往 OSS 控制台开启 CDN 缓存自动刷新功能。具体配置参见CDN 缓存自动刷新配置中的"开启 CDN 缓存自动刷新"部分。
此功能不保证一定能成功提交刷新任务,也不保证刷新任务提交的及时性。如果对时效性有要求或需要了解刷新结果,可以使用 CDN 的刷新功能,参见刷新和预热资源。
OSS 控制台上无法开启 CDN 自动刷新怎么办?
无法开启 CDN 缓存自动刷新,提示"请先在 OSS 上绑定该域名"。
解决方案:单击OSS 域名绑定列对应域名的未绑定,根据界面提示绑定域名即可。如果已经绑定 CDN 且 DNS 已解析到 CDN 的 CNAME 域名,绑定 OSS 域名后不要修改 DNS 解析,否则将无法继续使用 CDN 加速服务。
使用 CDN 加速 OSS 后 OSS 图片处理的参数为什么不生效?
CDN 加速 OSS 场景下,请求先到达 CDN 节点。如果 CDN 开启了忽略参数功能,CDN 节点处理用户请求时会去除请求 URL 中 ? 之后的参数。如果资源已缓存,则不会回源 OSS 获取资源,此时 OSS 图片处理将无法生效。更多信息参见忽略参数。
关闭 CDN 的忽略参数功能,当用户请求携带参数时将触发回源 OSS,此时 OSS 图片处理可以正常生效。
关闭忽略参数后,由于携带参数的请求均会触发回源,缓存命中率可能会降低。也可以通过 CDN 提供的图片处理概述功能,在 CDN 节点上完成图片处理。
视频截帧场景的特殊配置
使用 OSS 视频截帧功能时(通过 x-oss-process=video/snapshot,t_1000 等参数),如果 CDN 域名开启了忽略参数,原视频链接与带截帧参数的链接会被缓存为同一份资源,导致访问视频时返回截帧图片,或访问截帧时返回原视频。
解决方案:通过 CDN 控制台的忽略 URL 参数功能,使用保留指定参数模式,将 x-oss-process 参数设置为保留。这样带截帧参数的 URL 能够单独缓存,不会与原视频缓存冲突。修改配置后,需要对视频文件所在目录执行目录刷新操作。
CDN 回源 OSS 时如何排除某个目录或某些文件使其不被 CDN 缓存?
在 CDN 加速 OSS 场景下,某些文件或目录可能需要跳过 CDN 缓存,每次请求都直接从 OSS 获取最新版本。可通过以下两种方式实现,具体选择取决于管理习惯和控制权限:
CDN 侧配置(推荐):通过 CDN 控制台统一管理缓存规则,适合运维团队集中管理的场景。前往 CDN 控制台的缓存配置设为 0。规则生效后,CDN 收到这些路径的请求时会直接回源 OSS,不缓存返回结果。
OSS 侧配置:为 OSS 文件设置响应头,适合存储与内容管理分离的场景。前往 CDN 控制台,确认缓存策略优先级为,否则 CDN 自定义规则可能覆盖 OSS 响应头。确认后,进入 OSS 控制台,选择文件管理 > 文件列表,选中目标文件,按需设置 Cache-Control 值:
Cache-Control 值 | 适用场景 | 说明 |
| 推荐:每次获取最新版本,如 HTML、配置文件、版本元数据 | CDN 不缓存;浏览器带 ETag 协商更新。 |
| 高敏感场景:包含用户隐私、Token、金融数据等不应在任何环节留存的内容 | CDN 和浏览器均不缓存,每次全量请求。 |
| 个性化内容:页面包含按用户定制内容、不能被多用户共享缓存 | CDN 不缓存;浏览器仍可缓存。 |
以上两种方案仅对新请求生效。如果目标文件之前已被 CDN 缓存,新设置不会自动清除边缘节点上的缓存,用户仍会看到旧版本。必须额外执行一次 CDN 缓存刷新。输入目标 URL 或目录,刷新后,后续请求将按新规则回源 OSS 获取最新内容。
缓存命中率低、回源频繁如何解决?
排查方向
使用 curl -I 多次请求同一资源,观察 Age 和 X-Cache 响应头。Age: 0 或 X-Cache: MISS 表示回源。
解决方案
缓存规则 TTL 设置过短或设置为"不缓存",适当调整缓存规则,增加缓存过期时间。
开启了"忽略参数"功能,但 URL 中存在用于版本控制或图片处理的必要参数(如
?v=1.1或x-oss-process),导致 CDN 将不同版本的 URL 视为同一资源,引发内容错乱或功能失效,此时需要关闭忽略参数功能。源站响应头(如
Cache-Control: no-cache)指示 CDN 不缓存。此时需要调整源站的缓存策略,或者配置 CDN 不遵循源站缓存策略。
缓存命中率低,回源频繁
排查方向:使用 curl -I 多次请求同一资源,观察 Age 和 X-Cache 响应头。Age: 0 或 X-Cache: MISS 表示回源。
解决方案:
缓存规则 TTL 设置过短或设置为"不缓存",适当调整缓存规则,增加缓存过期时间。
开启了"忽略参数"功能,但 URL 中存在用于版本控制或图片处理的必要参数(如
?v=1.1或x-oss-process),导致 CDN 将不同版本的 URL 视为同一资源,引发内容错乱或功能失效,此时需要关闭忽略参数功能。源站响应头(如
Cache-Control: no-cache)指示 CDN 不缓存。此时需要调整源站的缓存策略,或者配置 CDN 不遵守源站缓存策略(配置缓存过期时间时,开启)。
CDN 加速的视频链接被识别为图片导致无法播放
原因:浏览器根据响应头中的 Content-Type 判断资源类型。如果 OSS 中视频文件的 Content-Type 被错误设置为图片类型(如 image/jpeg),CDN 会透传该响应头,导致浏览器将视频当作图片处理。仅在 URL 后添加参数无法解决此问题。
解决方案(任选其一):
推荐方案 — 通过 CDN 修改响应头:登录 CDN 控制台,进入目标域名的,添加一条规则,将
Content-Type强制设置为video/mp4(可按文件后缀名条件匹配)。源站修正:登录 OSS 控制台,找到对应的视频文件,在文件详情中将
Content-Type手动修改为video/mp4。
OSSBrowser 工具是否支持配置 CDN 加速域名?
OSSBrowser 客户端工具不支持配置 CDN 加速域名作为自定义域名登录,仅支持 OSS 原生 Endpoint。