CDN加速访问
使用CDN分发OSS中的图片、视频、文档等静态资源,可以降低流量费用,提升资源加载速度。
方案概览
使用CDN加速访问OSS静态资源的过程如下:
要实现CDN加速访问OSS,只需三步:
- 创建私有Bucket:创建私有Bucket用于存放静态资源,构建了CDN内容分发的基础,同时有效限制静态资源未经授权的访问,保护数据的安全性。
- 添加CDN加速域名,并完成域名解析:在CDN控制台添加加速域名后,系统会为加速域名分配一个CNAME记录。接下来,您需要在您的DNS提供商处配置解析记录,将加速域名指向CDN提供的CNAME地址。这样,当用户通过加速域名访问内容时,实际上会被重定向到CDN的边缘节点。
- 开启私有Bucket回源:开启私有Bucket回源可以确保CDN能够从私有Bucket中获取所需的静态资源。
前提条件
操作步骤
一键部署
点击一键部署通过ROS脚本自动执行创建私有Bucket(或选择已有Bucket)、添加CDN加速域名,并完成域名解析、开启私有Bucket回源的所有步骤,实现CDN加速OSS资源访问。
手动部署
步骤一:创建私有Bucket
- 在对象存储OSS控制台的Bucket列表页面,单击创建Bucket。
- 在创建 Bucket面板,填写Bucket名称,其他参数按下图所示采用默认配置,然后单击完成创建。

步骤二:添加域名并解析域名
此处以加速域名oss.example.com为例介绍具体操作。您可以根据自己的实际情况来选择加速域名,包括主域名、二级域名、泛域名等。
- 添加域名。
- 解析域名。
步骤三:开启私有Bucket回源
- 在CDN控制台的域名管理列表,单击目标域名。
- 在左侧导航栏,单击回源配置,然后开启阿里云OSS私有Bucket回源。

结果验证
以上步骤部署完成后,需要在已创建的Bucket中上传文件,即可体验通过CDN加速域名访问OSS资源。
- 上传图片到已创建的Bucket。
- 获取文件URL。
- 验证CDN加速效果。
使用云监控的一次性拨测工具HTTP检测对比通过Bucket域名以及CDN加速域名访问同一个文件的加载时间。结果表明,通过CDN加速域名访问的加载时间为90.04 ms,而通过Bucket域名访问的加载时间为146.61 ms。相比而言,使用CDN加速域名访问的速度比通过Bucket域名访问的速度提升约38%。
建议配置
为了提高加速性能和访问安全,确保用户可以快速并安全地获取以及传输数据,您可以根据业务需求,完成以下配置。
启用HTTPS安全加速服务
CDN支持HTTPS安全加速服务,您可以将HTTPS证书部署至CDN平台,启用HTTPS安全加速服务,实现客户端与CDN节点间请求的加密传输。具体步骤,请参见配置HTTPS证书。
提高缓存命中率
- 缓存自动刷新:为确保用户能够及时访问到您在OSS中最新修改的文件,您可以通过OSS控制台启用CDN缓存自动刷新功能。具体步骤如下:
- 合理配置缓存过期时间
具体步骤,请参见配置缓存过期时间。
防止网站资源被非法盗用
Referer防盗链是基于HTTP请求头中Referer字段(例如Referer黑白名单)来设置访问控制规则,实现对访客的身份识别和过滤,防止网站资源被非法盗用。配置Referer黑白名单后,CDN会根据名单识别请求身份,允许或拒绝访问请求。允许访问请求,CDN会返回资源链接;拒绝访问请求,CDN会返回403响应码。更多信息,请参见配置Referer防盗链。
避免网站资源被恶意下载
通过CDN分发的内容默认为公开资源,用户获取URL后均可访问。为防止站点资源被恶意下载盗用,您还可以采用URL鉴权,自行配置校验鉴权URL中的加密串和时间戳,更安全有效地保护源站资源。更多信息,请参见配置URL鉴权。
提高CDN节点回源下载文件的效率
开启Range回源功能后,CDN节点请求源站OSS上的大文件时,OSS将按照CDN请求的Range范围返回分片内容,可减少回源流量消耗、减少资源响应时间。适用于音视频等较大文件的内容分发,不适用于图片小文件等业务,图片业务加速时无需配置。更多信息,请参见配置Range回源。
避免不带SNI的CDN回源请求影响OSS访问
为避免不带SNI的CDN回源请求导致OSS访问异常,建议在CDN中配置回源SNI,回源SNI设置与回源Host相同(回源Host默认为加速域名)。当回源请求携带SNI时,OSS能够在TLS握手阶段精准识别业务域名,方便OSS返回与域名匹配的证书,为您的域名提供一定程度的访问防护。如果OSS接收到不携带SNI的请求,OSS将无法进行业务域名的精准识别,则只能返回默认证书,且在TLS 握手阶段将所有不带SNI的请求视为同类处理,这可能导致更严格的流量限制,所有不带SNI的请求都可能会受到影响。更多信息,请参见配置回源SNI。
常见问题
如何判断是否命中CDN缓存?
- 未命中CDN节点缓存
通过开发者工具检查发现,表示CDN缓存策略实际效果的X-Cache字段返回值以MISS开头,表明首次访问未命中CDN节点缓存,需要向源站请求资源。
- 命中CDN节点缓存
后续访问命中CDN节点缓存后,X-Cache字段返回值将以HIT开头,表明源站的资源已缓存到CDN节点。
为什么通过CDN可以提升OSS静态资源的传输速度?
CDN通过在全球多个地区部署缓存节点,当用户请求访问OSS中的静态资源时,CDN会将用户的请求路由至距离用户最近的缓存节点,无需远距离请求直接访问OSS资源。这样可以大幅减少数据传输的距离,降低网络延迟,提升访问速度。
为什么通过CDN访问OSS可以降低流量成本?
通过Bucket外网域名直接请求OSS资源会产生OSS外网流出流量费用。相比CDN加速访问OSS模式,CDN可将OSS静态资源缓存至遍布全球的边缘节点上,当用户通过CDN加速域名访问OSS资源时,最近的CDN节点会将缓存的资源返回给用户,无需回源OSS,这一过程会产生CDN下行流量费用。相较于OSS外网流出流量,CDN下行流量单价更低。因此,通过CDN访问OSS资源可以有效降低流量成本。更多信息,请参见CDN加速OSS计费说明。
为什么通过CDN加速域名访问OSS私有文件时报错?
- 问题原因
开启私有Bucket回源功能后,CDN节点将会在回源请求中添加一个名称为Authorization的Header,其值为OSS私有Bucket鉴权签名信息。回源OSS的单个请求不能同时在Header以及URL请求参数中均携带签名。因此,当回源请求中携带了Authorization请求头后,文件URL中不能携带用于签名认证的参数,例如Expires、Signature、OSSAccessKeyId等,否则将会导致OSS鉴权失败。 - 解决方法
使用不包含签名信息的URL访问。例如,原文件URL为https://oss.example.com/outside.jpg?Expires=1700628094&OSSAccessKeyId=TMP.3********&Signature=B********,使用不包含签名信息的URL(https://oss.example.com/outside.jpg)访问。
开启回源私有Bucket后,触发静态网站首页的请求报错?
具体原因和解决方法请参见为什么CDN回源私有Bucket时,不支持访问Bucket的默认首页?
是否可以通过CDN域名上传文件到OSS?
出于安全考虑,不建议通过 CDN 域名上传文件到 OSS。如果 CDN 被设置为公共写入,这意味着任何人都可以通过 CDN 上传文件到 OSS ,而不需要身份验证或授权。OSS 更容易受到恶意上传和数据篡改的攻击。建议在限制最小权限的同时,使用 OSS 域名上传文件。
在一个CDN域名下,如何根据路径回源至不同的Bucket?
可以通过规则引擎来实现根据路径回源至不同的Bucket。

