CDN加速OSS资源

本文档提供了一个完整的指南,用于配置阿里云内容分发网络(CDN)以加速存储在对象存储服务(OSS)中的静态资源。该方案通过将 OSS 作为 CDN 的源站,利用 CDN 的全球节点缓存静态内容,从而实现用户就近访问,显著提升访问速度并降低源站负载。

客户价值

阿里云OSS可提供低成本的存储,CDN可以实现静态资源加速分发。使用OSS作为CDN的源站,价值和优势如下:

  • 用户访问网站资源,全部通过CDN,降低源站压力。

  • 使用CDN流量,单价低于直接访问OSS产生的外网流出流量。

  • 从距离客户端最近的CDN节点获取资源,减少网络传输距离,降低访问延迟。

技术架构

该方案的核心架构是利用 CDN 作为 OSS 的缓存层。当用户请求资源时,请求首先到达距离最近的 CDN 边缘节点。

  • 缓存命中:如果节点已缓存该资源,则直接从缓存中返回给用户,实现最快响应。

  • 缓存未命中:如果节点未缓存该资源,它会向源站(即 OSS Bucket)发起请求,获取资源,在将其返回给用户的同时,在节点上创建一份缓存副本,以备后续请求使用。

image

计费说明

OSS作为CDN源站时,可能会产生CDN下行流量费用以及OSS流出到CDN流量费用。具体请参见CDN加速OSS计费说明

前提条件

实施步骤

步骤一:添加加速域名并关联OSS源站

此步骤在 CDN 控制台注册加速域名,并将其与作为源站的 OSS Bucket 关联。

  1. 登录 CDN 控制台的域名管理页签。

  2. 点击添加域名,配置加速域名的基本信息:

    • 加速域名:输入对外提供服务的域名,例如 www.example.com

    • 加速区域:根据主要用户群体所在的地理位置选择。

    • 业务类型:根据资源类型选择,例如,对于小于 20MB 的图片和网页小文件,选择“图片小文件”。

    添加加速域名-cn.jpg

  3. 点击新增源站信息,填写OSS的信息:

    • 源站信息:选择 OSS域名。

    • 域名:从下拉列表中选择目标 OSS Bucket 的外网域名。

    image

  4. 单击确定,然后单击下一步。域名添加后会进入推荐配置页签。

步骤二:配置核心加速策略(推荐配置)

您可以按照推荐配置的引导流程来添加缓存过期时间、Range回源、忽略参数等基础配置,这些配置可以提升CDN的缓存命中率、访问性能以及安全性。

2.1 配置缓存过期时间

合理的缓存规则能最大化 CDN 性能,减少不必要的回源请求。缓存规则按顺序匹配,首个命中的规则生效。根据资源的特性,配置合理的缓存过期时间。以下为参考的推荐配置:

文件类型

文件后缀名

过期时间

说明

图片/音视频

jpg,png,gif,mp3,mp4

30

资源内容不经常变更

静态脚本

js,css

1小时

可能随版本发布而频繁变更

网站首页

html

不缓存(0秒)

确保用户始终获取最新页面结构

2.2 配置忽略参数

开启忽略参数功能后,CDN节点在生成缓存hashkey时会去除URL?之后的参数,这样客户端在携带不同的参数访问同一个资源文件的时候,都能够命中到同一个缓存文件,有助于提高缓存命中率,减少回源流量。

image

2.3 开启Range回源

适用于音视频等较大文件的内容分发,不适用于图片小文件等业务,图片业务加速时无需配置。

开启Range回源功能后,CDN节点请求源站OSS上的大文件时,OSS将按照CDN请求的Range范围返回分片内容,可减少回源流量消耗、减少资源响应时间。

image

2.4 配置OSS文件自动刷新缓存

为确保OSS中的内容更新能及时同步到CDN,可以在OSS控制台Bucket配置 > 域名管理页面开启目标域名的OSS目标域名绑定CDN缓存自动刷新,选择需要自动刷新的操作。当OSS内容发生更新时,OSS会自动触发CDN刷新任务。

说明

此功能为事件触发,不保证100%的送达率和实时性。在OSS侧高并发写入或网络抖动等极端情况下,刷新事件可能丢失。对时效性要求极高的场景,建议直接使用CDN刷新和预热功能。

image

步骤三:配置DNS解析并验证生效

  1. 前往阿里云CDN控制台的域名管理列表,找到之前添加的域名,复制域名对应的CNAME值(如果此处值为空,请稍等五秒之后刷新重试)。

    CANME-cn.jpg

  2. 使用加速域名所在的阿里云账号,登录云解析DNS控制台,在域名解析页面,找到域名并单击解析设置。

  3. 单击 添加记录,创建一条 CNAME 记录:

    • 记录类型:选择 CNAME

    • 主机记录:填写子域名的前缀(例如 www)。

    • 记录值:粘贴从 CDN 控制台复制的 CNAME 值。

    • 其他参数保持默认,然后单击 确认。

    image

步骤四:安全配置

4.1 启用HTTPS加密传输

如果您的应用在配置阿里云CDN之前已经支持HTTPS访问,请务必进行HTTPS证书的配置,否则您的域名将不再支持HTTPS访问。

说明

开启HTTPS将产生HTTPS请求数,静态HTTPS请求数每月前500万次免费,超过500万次后,开始计费。HTTPS请求数计费不能使用CDN流量包抵扣,请确保您的账户余额充足,或购买HTTPS请求包,避免欠费导致CDN停止服务。详情敬请参见静态HTTPS请求数

  1. 前往阿里云CDN控制台的域名管理列表,找到之前添加的域名,点击管理,进入域名配置页。

  2. 选择HTTPS配置页签中的HTTPS证书,点击修改配置

  3. HTTPS设置界面,打开HTTPS安全加速开关,并配置证书相关参数。

    HTTPS-cn.jpg

    说明
    • 如果您已在阿里云数字证书管理服务中购买了证书,请选择云盾(SSL)证书中心,并在证书名称中选择已购买的证书,如果无法选择您购买的证书,请检查已购买证书绑定的域名和加速域名是否相同。

    • 如果您使用的是第三方服务商签发的证书,请选择自定义上传(证书+私钥),您需要在设置证书名称后,上传证书(公钥)私钥,该证书将在阿里云数字证书管理服务中保存。您可以在我的证书中查看。

4.2 授权 CDN 访问私有 Bucket

如果 OSS Bucket 为私有权限,则必须完成以下授权,否则所有回源请求都将因无权限而失败。

  1. 前往阿里云CDN控制台的域名管理列表,找到之前添加的域名,点击管理,进入域名配置页。

  2. 回源配置中打开阿里云OSS私有Bucket回源,然后选择同账号回源。如果涉及到跨账号回源,请参考OSS私有Bucket回源进行配置。

    image

4.3 配置 URL 鉴权

URL 鉴权(也称时间戳防盗链)通过在访问 URL 中加入签名和过期时间,防止资源被恶意盗用。阿里云CDN提供了多种鉴权方式,不同鉴权类型的区别和实现请参考配置URL鉴权

  1. 前往阿里云CDN控制台的域名管理列表,找到之前添加的域名,点击管理,进入域名配置页

  2. 访问控制页签中,选择URL鉴权,点击修改配置

  3. 在配置页中,选择A方式,设置一个KEY和一个KEY(主、备KEY至少要填写一个),并妥善保管。这些密钥将用于在服务端验证带有签名的 URL,使用示例请参考鉴权方式A说明

  4. 根据业务需求设置鉴权 URL 的有效时间,例如 1800 秒。

    image

4.4 配置用量封顶

为防止域名被攻击或盗刷产生突发高带宽,导致产生高额账单,可通过配置用量封顶,控制用户访问该域名的带宽、流量、HTTPS请求数上限值,减少因突发流量导致的损失。

  1. 域名管理页面,找到目标域名,单击操作列的管理

  2. 在指定域名的左侧导航栏,单击流量限制

  3. 用量封顶页签中,参考功能介绍,配置适合自身业务的用量封顶策略。

  4. 点击修改配置,可以根据自身业务选择合适的统计周期阈值解封时间。具体参数配置请参考功能介绍

  5. 单击确定,封顶规则即可创建成功并生效。

4.5 监控与告警

设置实时监控

设置对CDN产品下指定域名的带宽峰值监控,达到设定的带宽峰值后将会给管理员发送告警,便于更加及时地发现潜在风险。详情请参见设置报警

设置费用预警

您可以在控制台右上方菜单栏费用选择费用与成本,通过设置以下这几个功能来更好地控制账户的消费额度,避免产生过高的账单。

  • 可用额度预警:设置账户余额低于一定金额时向报警联系人的联系方式发送告警信息。

  • 启用延停额度:您可以选择关闭该功能,这样在账号欠费时会立即关闭业务,以避免产生更多消费。更多信息,请参见延期免停权益

常见问题排查

访问返回 403 Forbidden

排查方向

  1. 查看页面的错误信息,如果出现You don't have permission to access the URL on this server,并且附带类似于denied by IP ACL = not in whitelist(被IP规则中的白名单拦截)的错误信息,可以根据错误信息快速定位被拦截的策略。

  2. 如果只出现You don't have permission to access the URL on this server,没有出现对应的拦截信息,请检查CDNURL鉴权和远程鉴权。

缓存命中率低,回源频繁

排查方向

使用 curl -I 多次请求同一资源,观察 Age 和 X-Cache 响应头。Age: 0 或 X-Cache: MISS 表示回源。

解决方案

  • 缓存规则 TTL 设置过短或设置为“不缓存”,适当调整缓存规则,增加缓存过期时间。

  • 开启了“忽略参数”功能,但 URL 中存在用于版本控制或图片处理的必要参数(如 ?v=1.1 或 x-oss-process),导致 CDN 将不同版本的 URL 视为同一资源,引发内容错乱或功能失效,此时需要关闭忽略参数功能。

  • 源站响应头(如 Cache-Control: no-cache)指示 CDN 不缓存。此时需要调整源站的缓存策略,或者配置CDN不遵守源站缓存策略(配置缓存过期时间时,开启忽略源站不缓存标头)。

访问资源提示AccessDenied

排查方向

查看给出的错误信息,如果是You have no right to access this object because of bucket acl,说明错误是因为OSSBucket ACL是私有,需要开启阿里云OSS私有Bucket回源

解决办法

CDN控制台的回源配置中,打开阿里云OSS私有Bucket回源,然后使用资源刷新功能,待访问链接刷新完成之后即可正常访问。