使用CDN分发OSS中的图片、视频、文档等静态资源,可以降低流量费用,提升资源加载速度。
方案概览
使用CDN加速访问OSS静态资源的过程如下:
要实现CDN加速访问OSS,只需三步:
创建私有Bucket:创建私有Bucket用于存放静态资源,构建了CDN内容分发的基础,同时有效限制静态资源未经授权的访问,保护数据的安全性。
添加CDN加速域名,并完成域名解析:在CDN控制台添加加速域名后,系统会为加速域名分配一个CNAME记录。接下来,您需要在您的DNS提供商处配置解析记录,将加速域名指向CDN提供的CNAME地址。这样,当用户通过加速域名访问内容时,实际上会被重定向到CDN的边缘节点。
开启私有Bucket回源:开启私有Bucket回源可以确保CDN能够从私有Bucket中获取所需的静态资源。
前提条件
操作步骤
手动部署
步骤一:创建私有Bucket
在对象存储OSS控制台的Bucket列表页面,单击创建Bucket。
在创建 Bucket面板,填写Bucket名称,其他参数按下图所示采用默认配置,然后单击完成创建。
步骤二:添加域名并解析域名
此处以加速域名oss.example.com
为例介绍具体操作。您可以根据自己的实际情况来选择加速域名,包括主域名、二级域名、泛域名等。
步骤三:开启私有Bucket回源
在CDN控制台的域名管理列表,单击目标域名。
在左侧导航栏,单击回源配置,然后开启阿里云OSS私有Bucket回源。
结果验证
以上步骤部署完成后,需要在已创建的Bucket中上传文件,即可体验通过CDN加速域名访问OSS资源。
上传图片到已创建的Bucket。
获取文件URL。
在文件列表页面,单击文件操作列的详情。
单击复制文件 URL,获取文件URL。
获取通过Bucket域名访问的文件URL
通过Bucket域名访问文件时,因文件读写权限为私有,您需要获取带签名信息的文件URL。
获取通过CDN加速域名访问的文件URL
通过CDN加速域名访问文件时,需要使用不包含签名信息的URL访问。例如,复制的文件URL为
http://oss.example.com/dest.jpg?Expires=1727408333&OSSAccessKeyId=TMP.3********&Signature=eg********
,使用不包含签名信息的URL为(https://oss.example.com/dest.jpg
)。
验证CDN加速效果。
使用云监控的一次性拨测工具HTTP检测对比通过Bucket域名以及CDN加速域名访问同一个文件的加载时间。结果表明,通过CDN加速域名访问的加载时间为90.04 ms,而通过Bucket域名访问的加载时间为146.61 ms。相比而言,使用CDN加速域名访问的速度比通过Bucket域名访问的速度提升约38%。
说明以上测试数据仅供参考。因不同的网络环境、地理位置等因素,访问速度提升的比例存在差异。通常而言,如果用户所在Region距离CDN节点较近,或者网络环境较好,则访问速度提升的比例可能更高。
建议配置
为了提高加速性能和访问安全,确保用户可以快速并安全地获取以及传输数据,您可以根据业务需求,完成以下配置。
启用HTTPS安全加速服务
CDN支持HTTPS安全加速服务,您可以将HTTPS证书部署至CDN平台,启用HTTPS安全加速服务,实现客户端与CDN节点间请求的加密传输。具体步骤,请参见配置HTTPS证书。
提高缓存命中率
缓存自动刷新:为确保用户能够及时访问到您在OSS中最新修改的文件,您可以通过OSS控制台启用CDN缓存自动刷新功能。具体步骤如下:
在Bucket列表页面,单击目标Bucket名称。
在左侧导航栏,选择
,然后单击支持的操作。下拉选择需要开启CDN缓存自动刷新操作对应的API接口名称,然后单击确定。
重要此功能不保证一定能成功提交刷新任务,也不保证刷新任务提交的及时性。如果对时效性有要求或需要了解刷新结果,可以使用CDN的刷新功能,详情请参见刷新和预热资源。
合理配置缓存过期时间
不常更新的静态文件(例如,图片类型、应用下载类型等),建议设置1个月以上。
频繁更新的静态文件(例如,JS、CSS等),根据实际业务情况设置。
动态文件(例如,PHP、JSP、ASP等),建议设置为0s,即不缓存。
具体步骤,请参见配置缓存过期时间。
防止网站资源被非法盗用
Referer防盗链是基于HTTP请求头中Referer字段(例如Referer黑白名单)来设置访问控制规则,实现对访客的身份识别和过滤,防止网站资源被非法盗用。配置Referer黑白名单后,CDN会根据名单识别请求身份,允许或拒绝访问请求。允许访问请求,CDN会返回资源链接;拒绝访问请求,CDN会返回403响应码。更多信息,请参见配置Referer防盗链。
避免网站资源被恶意下载
通过CDN分发的内容默认为公开资源,用户获取URL后均可访问。为防止站点资源被恶意下载盗用,您还可以采用URL鉴权,自行配置校验鉴权URL中的加密串和时间戳,更安全有效地保护源站资源。更多信息,请参见配置URL鉴权。
提高CDN节点回源下载文件的效率
开启Range回源功能后,CDN节点请求源站OSS上的大文件时,OSS将按照CDN请求的Range范围返回分片内容,可减少回源流量消耗、减少资源响应时间。适用于音视频等较大文件的内容分发,不适用于图片小文件等业务,图片业务加速时无需配置。更多信息,请参见配置Range回源。
常见问题
如何判断是否命中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的默认首页?