使用CDN加速OSS资源访问

更新时间:

使用CDN分发OSS中的图片、视频、文档等静态资源,可以降低流量费用,提升资源加载速度。

方案概览

使用CDN加速访问OSS静态资源的过程如下:

image

要实现CDN加速访问OSS,只需三步:

  1. 创建私有Bucket:创建私有Bucket用于存放静态资源,构建了CDN内容分发的基础,同时有效限制静态资源未经授权的访问,保护数据的安全性。

  2. 添加CDN加速域名,并完成域名解析:在CDN控制台添加加速域名后,系统会为加速域名分配一个CNAME记录。接下来,您需要在您的DNS提供商处配置解析记录,将加速域名指向CDN提供的CNAME地址。这样,当用户通过加速域名访问内容时,实际上会被重定向到CDN的边缘节点。

  3. 开启私有Bucket回源:开启私有Bucket回源可以确保CDN能够从私有Bucket中获取所需的静态资源。

前提条件

操作步骤

一键部署

点击一键部署通过ROS脚本自动执行创建私有Bucket(或选择已有Bucket)、添加CDN加速域名,并完成域名解析、开启私有Bucket回源的所有步骤,实现CDN加速OSS资源访问。

手动部署

步骤一:创建私有Bucket

  1. 在对象存储OSS控制台的Bucket列表页面,单击创建Bucket

  2. 创建 Bucket面板,填写Bucket名称,其他参数按下图所示采用默认配置,然后单击完成创建

    bucket001.jpg

步骤二:添加域名并解析域名

此处以加速域名oss.example.com为例介绍具体操作。您可以根据自己的实际情况来选择加速域名,包括主域名、二级域名、泛域名等。

  1. 添加域名。

    1. 在CDN管理控制台的添加域名页面,按以下说明配置各项参数,其他参数采用默认配置,然后单击下一步

      cdn.jpg

    2. 域名管理页面,等待域名状态显示正常运行时,复制CNAME值,该示例为oss.example.com.w.kunlunaq.com

  2. 解析域名。

    1. 在云解析DNS控制台的域名解析页面,单击已添加域名oss.example.com右侧的解析设置,然后单击添加记录,按以下说明配置各项参数,其他参数采用默认配置,然后单击确认

      dns.jpg

    2. 等待几分钟后,使用ping命令查看加速域名是否生效。下图表示已生效。

      ping

步骤三:开启私有Bucket回源

  1. 在CDN控制台的域名管理列表,单击目标域名。

  2. 在左侧导航栏,单击回源配置,然后开启阿里云OSS私有Bucket回源。

    cdn.jpg

结果验证

以上步骤部署完成后,需要在已创建的Bucket中上传文件,即可体验通过CDN加速域名访问OSS资源。

  1. 上传图片到已创建的Bucket。

    1. Bucket列表页面,单击创建的Bucket名称。

    2. 文件列表页面,单击上传文件,选择需要上传的静态资源,例如图片文件(dest.jpg),然后按页面指引完成上传操作。

  2. 获取文件URL。

    1. 文件列表页面,单击文件操作列的详情

    2. 单击复制文件 URL,获取文件URL。

      • 获取通过Bucket域名访问的文件URL

        通过Bucket域名访问文件时,因文件读写权限为私有,您需要获取带签名信息的文件URL。

        Dingtalk_20240927113557.jpg

      • 获取通过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)。

        dest.jpg

  3. 验证CDN加速效果。

    使用云监控的一次性拨测工具HTTP检测对比通过Bucket域名以及CDN加速域名访问同一个文件的加载时间。结果表明,通过CDN加速域名访问的加载时间为90.04 ms,而通过Bucket域名访问的加载时间为146.61 ms。相比而言,使用CDN加速域名访问的速度比通过Bucket域名访问的速度提升约38%。

    说明

    以上测试数据仅供参考。因不同的网络环境、地理位置等因素,访问速度提升的比例存在差异。通常而言,如果用户所在Region距离CDN节点较近,或者网络环境较好,则访问速度提升的比例可能更高。

    image

建议配置

为了提高加速性能和访问安全,确保用户可以快速并安全地获取以及传输数据,您可以根据业务需求,完成以下配置。

启用HTTPS安全加速服务

CDN支持HTTPS安全加速服务,您可以将HTTPS证书部署至CDN平台,启用HTTPS安全加速服务,实现客户端与CDN节点间请求的加密传输。具体步骤,请参见配置HTTPS证书

提高缓存命中率

  • 预热和刷新资源:通过预热功能,会将源站OSS的存量资源缓存到CDN节点,当您首次请求资源时,即可直接从CDN节点获取到最新的资源,无需从源站获取。通过刷新功能,可以确保OSS源站内容发生变化时,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节点缓存,需要向源站请求资源。

    outside.jpg

  • 命中CDN节点缓存

    后续访问命中CDN节点缓存后,X-Cache字段返回值将以HIT开头,表明源站的资源已缓存到CDN节点。

    outside.jpg

为什么通过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中不能携带用于签名认证的参数,例如ExpiresSignatureOSSAccessKeyId等,否则将会导致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的默认首页?