CDN加速访问

更新时间:
一键部署
我的部署

分发对象存储OSS中的静态资源(如图片、音视频、文档)时,通过配置CDN加速,可以显著提升访问速度、降低网络延迟,并削减流量成本。

工作原理

CDN加速OSS的原理,是将存储在OSS Bucket(源站)中的静态内容,缓存到遍布全球的CDN边缘节点上。

  1. 当用户首次请求一个资源时,请求会被智能路由到距离最近的CDN节点。

  2. CDN节点发现没有缓存此资源,便会向OSS源站发起回源请求,获取资源。

  3. OSS将资源响应给CDN节点后,节点会根据设定的缓存规则将资源缓存起来,同时将资源返回给用户。

  4. 当其他用户再次请求同一个资源时,CDN节点将直接从缓存中响应,无需再次回源。这个过程极大地缩短了访问路径,实现了访问加速。

image

使用前提

在开始配置前,请确保已满足以下条件:

  • 准备域名:拥有一个已注册的域名或注册一个新域名,支持绑定非阿里云注册的域名。

  • 完成备案:加速区域包含中国内地时,加速域名必须完成ICP备案

配置CDN加速

  1. 添加域名

    CDN控制台页面单击添加域名,选择加速区域业务类型,填写加速域名,并按下图所示添加源站信息,然后单击下一步完成域名添加。

    说明

    可以配置主域名(如 example.cn)或自定义的子域名(如 oss.example.cn)作为CDN加速域名。

    image

  2. 解析域名

    1. 推荐配置页面单击打开配置向导,或者返回域名管理页面,将鼠标移动至域名右侧的待配置处,在提示窗口单击打开配置向导

      image

    2. 复制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回源。

image

验证加速效果

配置完成后,即可体验通过CDN加速域名访问OSS资源。

  1. 上传文件到Bucket

    Bucket列表页面单击Bucket名称,然后在文件列表页面单击上传文件,选择需要上传的静态资源(如dest.jpg),按页面提示完成上传。

  2. 获取文件访问URL

    • OSS默认访问URL:在文件列表页面单击目标文件操作列的详情,然后在详情页单击复制文件URL

      image

    • CDN加速访问URL:使用CDN加速域名和文件名,构造一个不包含签名信息的访问URL,例如 http://example.cn/dest.jpg,其中 example.cnCDN加速域名。

  3. 验证加速效果

    使用专业的测速平台或工具(如云监控一次性拨测工具),对比OSS默认访问URLCDN加速访问URL访问同一个文件的加载时间。

    说明

    测试数据仅供参考,因不同的网络环境、地理位置等因素,访问速度提升的比例存在差异。首次检测时,因CDN节点无缓存,需回源获取资源,加速效果可能不明显。请于首次检测后,待CDN缓存生效后再次进行测试,以验证CDN加速效果。

    image

应用于生产环境

完成CDN加速访问的配置与验证后,请参考以下建议将其平稳、高效地部署到生产环境。

  • 切换生产域名:将生产应用中对OSS资源的访问(无论是OSS默认域名还是自定义域名)统一替换为经过验证的CDN加速域名。

  • 隔离和管理资源:针对多Bucket场景,可为每个Bucket配置独立的加速子域名以实现清晰的资源隔离,或通过单一CDN加速域名根据不同的路径规则将请求智能路由至不同的Bucket。

  • 提高缓存命中率:鉴于CDN下行流量的单价低于OSS外网流出流量,因此,高缓存命中率是实现生产流量降本的核心。建议通过资源预热、制定精细化的缓存策略等方式,有效提升缓存命中率。

  • 提升访问安全性:通过配置HTTPS证书、Referer防盗链、URL鉴权等方式全方位加固生产环境中CDN加速域名的访问安全。

计费说明

CDN加速访问涉及CDN费用和OSS费用。

  • CDN费用:主要为使用CDN产生的流量费用,计费规则请参见CDN计费概述。相较OSS外网流出流量,CDN下行流量单价更低,通过CDN访问OSS可以有效降低流量成本。

  • OSS费用:主要包括以下三部分,更多计费详情请参见OSS计费概述

    • 存储费用:文件存储在OSS中产生的费用。

    • 流量费用:CDN节点缓存未命中,需要回源到OSS获取资源时,产生的流量费用,按OSSCDN回源流出流量计费。优化缓存配置、提高缓存命中率是降低此部分费用的关键。

    • 请求费用:回源时产生的OSS请求费用。

回源多个Bucket

当需要回源多个Bucket时,可以为每个Bucket配置独立的CDN加速子域名,或者通过单一CDN加速域名根据不同的访问路径回源到多个Bucket。

使用独立子域名

为不同的Bucket配置独立的CDN加速域名,通过多个自定义的子域名(如 bucket1.example.cnbucket2.example.cn),分别回源至对应的Bucket。

使用单一域名

为实现通过单一加速域名根据不同访问路径回源到多个不同的Bucket,只需根据规则引擎设置路径规则,并将这些路径分别指向对应的Bucket源站。此处以两个Bucket(cdn-bucket1cdn-bucket2)为例介绍如何进行配置。

  1. 添加路径规则

    首先,在CDN控制台单击目标加速域名,然后单击规则引擎 > 添加规则,按下图所示添加两条URL路径规则,分别用于匹配 http://example.cn/bucket1/*http://example.cn/bucket2/*。其中 example.cn 为加速域名,使用 bucket1bucket2 分别指向 cdn-bucket1cdn-bucket2* 为对象在Bucket内的真实路径。

    image

  2. 配置条件源站

    接下来,在加速域名的基本配置中配置两个条件源站,将先前创建的路径规则与各自的目标Bucket源站地址进行绑定,以实现请求根据路径规则进行路由。

    image

  3. 指定源站回源HOST

    配置条件源站路由后,还需在加速域名的回源配置中为每个源站指定源站回源HOST。

    image

  4. 重写回源URL

    最后,为确保源站能正确定位资源,需在加速域名的回源配置中重写回源URL,在回源时自动剥离用于路由的虚拟路径(如 /bucket1),使回源请求路径与Bucket内的对象实际存储路径保持一致。

    image

  5. 效果验证

    配置完成后,即可使用单一CDN加速域名根据不同路径访问不同的OSS Bucket资源。

    image

提升访问性能

使用资源预热

在计划发布新资源或进行运营活动前,可以使用CDN刷新和预热功能,将热点资源提前缓存到CDN节点。预热后用户首次访问时即可直接命中缓存,避免大量回源请求对源站造成的冲击,降低源站压力的同时提升用户体验。

合理配置缓存策略

为不同类型的文件设置合理的缓存周期

  • 不常更新的静态文件:建议设置较长的缓存时间(例如1个月以上),以最大化缓存命中率,如图片、应用安装包等。

  • 频繁更新的静态文件:可根据业务更新频率设置为数小时或数天,如JS、CSS等。

  • 动态文件:设置为0秒(不缓存),确保每次都回源获取最新内容,如PHP、JSP、ASP等。

开启缓存自动刷新

为确保OSS中的内容更新能及时同步到CDN,可以在OSS控制台的Bucket配置 > 域名管理页面开启目标域名的CDN缓存自动刷新。通过设置的API接口进行内容更新时,OSS会自动触发CDN刷新任务。

说明

此功能不保证时效性和100%成功。对时效性要求极高的场景,建议直接使用CDN的刷新和预热功能。

开启Range回源

对于音视频点播、大文件分发等场景,可以在CDN开启Range回源。这允许CDN节点按需分片请求大文件,不仅支持拖动播放,还能减少不必要的回源流量和首屏等待时间。

优化数据传输

为减小JS、CSS、HTML等文本文件的传输体积,提高传输效率,可以在CDN控制台开启Gzip压缩页面优化功能。Gzip压缩会对资源进行压缩后返回,页面优化会自动删除冗余内容,例如HTML页面、内嵌JavaScriptCSS中的注释以及重复的空白符。

说明
  • 此功能会改变 Content-LengthContent-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域名的风险,如下图所示。

image

可以按以下操作修改回源HOST配置,使用CDN加速域名回源OSS资源。

  1. Bucket列表页面单击目标Bucket名称,然后在Bucket配置 > 域名管理中将CDN加速域名绑定到Bucket。

    image

  2. CDN控制台页面单击目标加速域名,然后在回源配置 > 默认回源HOST中单击修改配置,并将域名类型修改为加速域名

配置回源SNI

为避免不带SNICDN回源请求导致OSS访问异常,建议在CDN配置回源SNI,回源SNI设置与回源HOST相同(回源HOST默认为加速域名)。当回源请求携带SNI时,OSS能够在TLS握手阶段精准识别业务域名,便于OSS返回与域名匹配的证书,为域名提供一定程度的访问防护。如果OSS接收到不携带SNI的请求,将无法进行业务域名的精准识别,只能返回默认证书,且在TLS 握手阶段将所有不带SNI的请求视为同类处理,可能导致更严格的流量限制,所有不带SNI的请求都可能会受到影响。

常见问题

如何判断请求是否命中CDN缓存?

在浏览器的开发者工具中,通过查看资源请求响应头 X-Cache 字段的值进行判断。

  • 如果值以 HIT 开头,表示成功命中CDN缓存。

  • 如果值以 MISS 开头,表示未命中CDN缓存,需要进行回源。

如何统计文件的真实访问次数?

启用CDN加速后,OSS的访问日志将无法记录由CDN缓存直接响应的终端用户访问请求,可通过以下方式统计文件的真实访问次数:

使用CDN加速后OSS下行流量是否会变少?

如果CDN缓存的文件被频繁命中,OSS的下行流量会显著降低。

CDN缓存文件被频繁命中的前提是,业务场景中的部分数据在某段时间内被频繁访问,例如网站访问、图片文件下载、游戏发行等。

为什么通过CDN访问私有OSS文件时会报错?

最常见的原因是访问URL中包含了签名,开启私有Bucket回源后,通过CDN访问必须使用不包含签名信息的URL,例如 https://oss.example.com/test.jpg,其中 oss.example.comCDN加速域名。

为什么通过CDN无法访问OSS图片处理的URL?

通常原因是没有设置忽略参数,此时使用CDN加速访问带图片处理参数的URL,节点会主动过滤携带的参数进行回源,需要在CDN控制台修改忽略参数配置。

为什么通过CDN访问时跨域CORS配置不生效?

OSS控制台设置跨域CORS规则后,使用CDN加速域名访问OSS资源失败,可能的原因如下:

  • 通过OSS控制台配置CORS规则后,如果CDN节点缓存了旧的、未配置CORS时的资源响应头,新的跨域请求可能因为浏览器收到的是缓存中的过期头部信息而失败。

  • 通过OSS控制台配置的CORS规则可能没有设置为允许目标域名进行跨域访问,或者没有正确指定HTTP方法(如GET、POST)以及自定义请求头等。

解决方案如下:

  1. CDN控制台页面单击加速域名或加速域名操作列的管理

  2. 缓存配置 > 修改出站响应头页面按下图所示配置响应头参数和响应头值。

    说明

    参数设置仅供参考,请结合实际业务场景进行调整。

    image

配置以上参数后,通过CDN节点访问OSS资源都会包含以上信息,确保跨域校验时可以正常使用。测试效果如下:

image

为什么配置静态页面后通过CDN加速访问报错 403 ForbiddenYou are forbidden to list buckets

开启私有Bucket回源后,CDN进行回源时默认会带上签名信息,属于非匿名访问,与静态网站的默认首页要求匿名访问冲突。需要在CDN配置URL改写规则待重写的Path配置为支持根目录访问的 ^/$目标Path配置为 /index.html执行规则选择Redirect

为什么CDN回源时出现 5xx 报错?

5xx 错误表示CDN无法成功从OSS源站获取资源,需要排查以下内容:

  • 源站配置:检查CDN控制台配置的OSS源站地址是否正确。

  • 回源协议:如果CDN配置了HTTPS回源或协议跟随回源,请确保源站支持HTTPS访问。

  • 网络链路:测试CDN节点或本地到OSS源站的网络连通性。CDN节点都是公网上的节点,CDN配置的源站必须要连通公网,如果配置的源站IP公网不可达、端口不通或者源站域名没有解析,则会导致CDN回源请求源站失败。

  • 源站压力:在CDN实时监控页面观察是否存在突增的带宽和流量,大量的回源请求可能会导致源站压力过高,导致回源响应超时。对于热点资源,应在资源发布时进行资源预热设置合理的缓存周期

更新了OSS文件后,为什么访问CDN还是旧内容?

通常是因为OSS资源在CDN节点存在旧资源的缓存,可开启缓存自动刷新或在CDN刷新预热页面手动刷新资源。

是否可以通过CDN域名上传文件到OSS?

出于安全考虑,不建议通过 CDN 域名上传文件到 OSS。如果 CDN 被设置为公共写入,这意味着任何人不需要身份验证或授权都可以通过 CDN 上传文件到 OSS ,容易受到恶意上传和数据篡改的攻击。建议在限制最小权限的同时,使用 OSS 域名上传文件。