分发对象存储OSS中的静态资源(如图片、音视频、文档)时,通过配置CDN加速,可以显著提升访问速度、降低网络延迟,并削减流量成本。
工作原理
CDN加速OSS的原理,是将存储在OSS Bucket(源站)中的静态内容,缓存到遍布全球的CDN边缘节点上。
当用户首次请求一个资源时,请求会被智能路由到距离最近的CDN节点。
该CDN节点发现没有缓存此资源,便会向OSS源站发起回源请求,获取资源。
OSS将资源响应给CDN节点后,节点会根据设定的缓存规则将资源缓存起来,同时将资源返回给用户。
当其他用户再次请求同一个资源时,CDN节点将直接从缓存中响应,无需再次回源。这个过程极大地缩短了访问路径,实现了访问加速。
使用前提
在开始配置前,请确保已满足以下条件:
配置CDN加速
添加域名
在CDN控制台页面单击添加域名,选择加速区域和业务类型,填写加速域名,并按下图所示添加源站信息,然后单击下一步完成域名添加。
说明可以配置主域名(如
example.cn
)或自定义的子域名(如oss.example.cn
)作为CDN加速域名。解析域名
在推荐配置页面单击打开配置向导,或者返回域名管理页面,将鼠标移动至域名右侧的待配置处,在提示窗口单击打开配置向导。
复制CNAME记录值(如
example.cn.w.kunlunap.com
),在云解析DNS控制台页面目标域名操作列单击解析设置,然后在解析设置页面单击添加记录,选择记录类型为CNAME,并填写主机记录和记录值,单击确定添加解析记录。说明主机记录的设置需与加速域名保持一致。当加速域名为主域名(如
example.cn
)时,主机记录应填写为@
;当加速域名为子域名(如oss.example.cn
)时,主机记录应填写为子域名的前缀oss
。
回源私有Bucket
默认情况下,新创建的Bucket是私有的,通过CDN访问时需要开启私有Bucket回源。如果将Bucket读写权限设为公共读,CDN可直接访问,无需开启私有Bucket回源。
在CDN控制台页面单击目标域名,然后在左侧导航栏单击回源配置,在阿里云OSS私有Bucket回源部分按照下图所示开启私有Bucket回源。
验证加速效果
配置完成后,即可体验通过CDN加速域名访问OSS资源。
上传文件到Bucket
在Bucket列表页面单击Bucket名称,然后在文件列表页面单击上传文件,选择需要上传的静态资源(如dest.jpg),按页面提示完成上传。
获取文件访问URL
OSS默认访问URL:在文件列表页面单击目标文件操作列的详情,然后在详情页单击复制文件URL。
CDN加速访问URL:使用CDN加速域名和文件名,构造一个不包含签名信息的访问URL,例如
http://example.cn/dest.jpg
,其中example.cn
为CDN加速域名。
验证加速效果
使用专业的测速平台或工具(如云监控一次性拨测工具),对比OSS默认访问URL和CDN加速访问URL访问同一个文件的加载时间。
说明测试数据仅供参考,因不同的网络环境、地理位置等因素,访问速度提升的比例存在差异。首次检测时,因CDN节点无缓存,需回源获取资源,加速效果可能不明显。请于首次检测后,待CDN缓存生效后再次进行测试,以验证CDN加速效果。
应用于生产环境
完成CDN加速访问的配置与验证后,请参考以下建议将其平稳、高效地部署到生产环境。
切换生产域名:将生产应用中对OSS资源的访问(无论是OSS默认域名还是自定义域名)统一替换为经过验证的CDN加速域名。
隔离和管理资源:针对多Bucket场景,可为每个Bucket配置独立的加速子域名以实现清晰的资源隔离,或通过单一CDN加速域名根据不同的路径规则将请求智能路由至不同的Bucket。
提高缓存命中率:鉴于CDN下行流量的单价低于OSS外网流出流量,因此,高缓存命中率是实现生产流量降本的核心。建议通过资源预热、制定精细化的缓存策略等方式,有效提升缓存命中率。
提升访问安全性:通过配置HTTPS证书、Referer防盗链、URL鉴权等方式全方位加固生产环境中CDN加速域名的访问安全。
计费说明
CDN加速访问涉及CDN费用和OSS费用。
回源多个Bucket
当需要回源多个Bucket时,可以为每个Bucket配置独立的CDN加速子域名,或者通过单一CDN加速域名根据不同的访问路径回源到多个Bucket。
使用独立子域名
为不同的Bucket配置独立的CDN加速域名,通过多个自定义的子域名(如 bucket1.example.cn
和 bucket2.example.cn
),分别回源至对应的Bucket。
使用单一域名
为实现通过单一加速域名根据不同访问路径回源到多个不同的Bucket,只需根据规则引擎设置路径规则,并将这些路径分别指向对应的Bucket源站。此处以两个Bucket(cdn-bucket1
、cdn-bucket2
)为例介绍如何进行配置。
添加路径规则
首先,在CDN控制台单击目标加速域名,然后单击 ,按下图所示添加两条URL路径规则,分别用于匹配
http://example.cn/bucket1/*
和http://example.cn/bucket2/*
。其中example.cn
为加速域名,使用bucket1
和bucket2
分别指向cdn-bucket1
和cdn-bucket2
,*
为对象在Bucket内的真实路径。配置条件源站
接下来,在加速域名的基本配置中配置两个条件源站,将先前创建的路径规则与各自的目标Bucket源站地址进行绑定,以实现请求根据路径规则进行路由。
指定源站回源HOST
配置条件源站路由后,还需在加速域名的回源配置中为每个源站指定源站回源HOST。
重写回源URL
最后,为确保源站能正确定位资源,需在加速域名的回源配置中重写回源URL,在回源时自动剥离用于路由的虚拟路径(如
/bucket1
),使回源请求路径与Bucket内的对象实际存储路径保持一致。效果验证
配置完成后,即可使用单一CDN加速域名根据不同路径访问不同的OSS Bucket资源。
提升访问性能
使用资源预热
在计划发布新资源或进行运营活动前,可以使用CDN的刷新和预热功能,将热点资源提前缓存到CDN节点。预热后用户首次访问时即可直接命中缓存,避免大量回源请求对源站造成的冲击,降低源站压力的同时提升用户体验。
合理配置缓存策略
为不同类型的文件设置合理的缓存周期。
不常更新的静态文件:建议设置较长的缓存时间(例如1个月以上),以最大化缓存命中率,如图片、应用安装包等。
频繁更新的静态文件:可根据业务更新频率设置为数小时或数天,如JS、CSS等。
动态文件:设置为0秒(不缓存),确保每次都回源获取最新内容,如PHP、JSP、ASP等。
开启缓存自动刷新
为确保OSS中的内容更新能及时同步到CDN,可以在OSS控制台的
页面开启目标域名的CDN缓存自动刷新。通过设置的API接口进行内容更新时,OSS会自动触发CDN刷新任务。此功能不保证时效性和100%成功。对时效性要求极高的场景,建议直接使用CDN的刷新和预热功能。
开启Range回源
对于音视频点播、大文件分发等场景,可以在CDN中开启Range回源。这允许CDN节点按需分片请求大文件,不仅支持拖动播放,还能减少不必要的回源流量和首屏等待时间。
优化数据传输
为减小JS、CSS、HTML等文本文件的传输体积,提高传输效率,可以在CDN控制台开启Gzip压缩或页面优化功能。Gzip压缩会对资源进行压缩后返回,页面优化会自动删除冗余内容,例如HTML页面、内嵌JavaScript和CSS中的注释以及重复的空白符。
此功能会改变
Content-Length
和Content-MD5
值,如果您的业务依赖这些值进行校验,请谨慎开启。同时开启了页面优化和压缩功能,页面优化功能将会失效,CDN只会对文件进行压缩。
增强访问安全性
启用HTTPS加密传输
为实现客户端与CDN节点间的加密传输,可以在CDN中配置HTTPS证书,开启HTTPS安全加速服务。
配置Referer防盗链
为防止资源被非法盗用,可以在CDN中配置Referer黑/白名单,允许或禁止特定来源(Referer)的网站访问您的资源。
配置URL鉴权
通过CDN分发的内容默认为公开资源,用户拿到URL后均可访问。为防止站点资源被恶意下载盗用,除了Referer防盗链、IP黑白名单等防控方式,还可以采用URL鉴权,自行配置校验鉴权URL中的加密串和时间戳,更安全有效地保护源站资源。
使用加速域名回源OSS
默认情况下,CDN使用Bucket默认域名回源OSS。直接使用Bucket默认域名回源可能会导致某些应用程序或平台不兼容。同时,CDN回源出错时(例如文件不存在时会返回404报错),存在暴露OSS Bucket域名的风险,如下图所示。
可以按以下操作修改回源HOST配置,使用CDN加速域名回源OSS资源。
配置回源SNI
为避免不带SNI的CDN回源请求导致OSS访问异常,建议在CDN中配置回源SNI,回源SNI设置与回源HOST相同(回源HOST默认为加速域名)。当回源请求携带SNI时,OSS能够在TLS握手阶段精准识别业务域名,便于OSS返回与域名匹配的证书,为域名提供一定程度的访问防护。如果OSS接收到不携带SNI的请求,将无法进行业务域名的精准识别,只能返回默认证书,且在TLS 握手阶段将所有不带SNI的请求视为同类处理,可能导致更严格的流量限制,所有不带SNI的请求都可能会受到影响。