CDN加速为OSS提供全球分布式缓存能力。当网站或应用需要向全球用户分发存储在OSS中的静态资源(如图片、音视频、文档)时,通过配置CDN加速,可以显著提升访问速度、降低网络延迟,并削减流量成本。
工作原理
CDN加速OSS采用分布式缓存架构,将存储在OSS Bucket(源站)中的静态内容主动分发并缓存到遍布全球的CDN边缘节点上,通过就近访问机制实现加速效果。
请求路由:用户首次请求资源时,请求通过智能DNS解析被路由到地理位置最近且网络状况最优的CDN节点。
回源获取:该CDN节点检测到本地无此资源缓存,随即向OSS源站发起回源请求获取资源内容。
缓存存储:OSS响应资源内容后,CDN节点根据预设缓存规则将资源存储在本地,同时向用户返回资源内容。
缓存命中:后续用户请求相同资源时,CDN节点直接从本地缓存响应,无需回源获取。这一机制大幅缩短访问路径,降低网络延迟,实现访问加速的同时减少源站负载。
快速使用
前提条件
步骤一:添加CDN加速域名并配置源站
前往CDN控制台,单击添加域名。
选择加速区域和业务类型,填写加速域名。加速域名支持主域名(如
example.com)或自定义的子域名(如oss.example.com),建议使用子域名以便于管理和扩展。单击新增源站信息,选择源站信息为OSS域名,并选择目标Bucket域名,单击确定,添加OSS源站。
单击下一步,完成CDN加速域名添加。
CDN加速域名添加完成后,可按照推荐配置的引导流程来添加缓存过期时间、Range回源、HTTPS证书等基础配置,或单击跳过,暂不配置,直接进入CNAME配置。
步骤二:配置CNAME解析规则
通过DNS CNAME记录将加速域名指向CDN分配的CNAME地址,实现域名解析到CDN节点的路由功能。以阿里云DNS解析为例进行介绍:
前往DNS控制台,在目标域名操作列单击解析设置。
单击添加记录,填写以下记录信息,其余配置项可保持默认设置。
配置项
说明
记录类型
选择CNAME。
主机记录
填写
@(主域名)或子域名前缀(如oss),根据CDN加速域名填写。记录值
填写向导页或加速域名列表页的CNAME值,如
oss.example.com.w.cdngslb.com。单击确定,按页面提示完成解析记录添加。
DNS解析的生效时间取决于记录的TTL(生存时间)设置,完全生效通常需要几分钟到几小时。配置后立即访问无效属于正常现象,请耐心等待或尝试清除本地DNS缓存。
步骤三:设置私有Bucket回源
默认情况下,新创建的Bucket读写权限为私有,通过CDN访问时需要开启私有Bucket回源功能,授权CDN节点访问私有资源。如果Bucket读写权限设为公共读,CDN可直接访问,无需开启此功能。
在CDN控制台单击目标域名,然后在左侧导航栏单击回源配置。
在阿里云OSS私有Bucket回源部分开启私有Bucket回源,回源类型选择同账号回源。
开启私有Bucket回源后,CDN将获得访问私有Bucket的授权,并自动在回源请求中添加签名信息。因此,客户端必须使用不包含签名参数的URL(如http://example.com/example.jpg)进行访问。若URL中仍携带Expires、Signature等签名参数,将导致OSS鉴权失败,返回403错误。
步骤四:验证加速效果
配置完成后,通过对比测试验证CDN加速域名的性能提升效果。
获取文件访问URL:
URL类型
获取方式
OSS默认访问URL
前往Bucket列表,单击目标Bucket,在目标文件操作列单击详情,然后单击复制文件 URL。
CDN加速访问URL
使用CDN加速域名和文件名构造URL,如
http://example.com/example.jpg(不包含签名信息)。验证加速效果:使用专业的测速平台或工具(如云监控一次性拨测工具),对比两个URL访问同一文件的加载时间。
说明首次检测时,因CDN节点无缓存需回源获取资源,加速效果可能不明显。请于首次检测后,待CDN缓存生效后再次测试。
检查缓存命中状态:通过浏览器的开发者工具(F12),查看资源请求的响应头中
X-Cache字段的值:字段值
含义
以
HIT开头成功命中CDN缓存,实现了加速效果。
以
MISS开头未命中CDN缓存,请求已回源至OSS获取资源。
场景示例
视频和大文件加速
对于视频点播、大文件下载等场景,需要特殊配置以确保良好的用户体验。
必要配置
视频码率建议
视频加载速度与码率密切相关。如果用户反馈视频播放卡顿,请检查视频码率:
码率范围 | 适用场景 | 说明 |
500kbps~2000kbps | 移动端、普通画质 | 推荐范围,加载流畅。 |
2000kbps~4000kbps | PC端、高清画质 | 需确保用户带宽充足。 |
>6000kbps | 超高清/4K | 可能导致加载缓慢,建议提供多码率版本。 |
如果视频码率过高(>10Mbps),即使开启CDN加速也可能出现加载缓慢的问题。建议使用视频转码服务降低码率,或提供多码率自适应播放。
多Bucket回源配置
当业务架构依赖于多个OSS Bucket存储不同类型或归属的资源时,可通过以下两种方案配置多源回源。
方式一:独立子域名架构
为不同功能或资源类型的Bucket分配独立的、语义化的子域名,并为每个子域名配置单独的CDN加速。
资源类型 | 子域名示例 | 配置建议 |
图片资源 |
| 配置长期缓存策略以提升访问速度 |
音视频资源 |
| 启用Range回源支持断点续传 |
敏感文档 |
| 单独启用URL鉴权保障安全 |
使用独立子域名架构具备以下优势:
语义化子域名便于开发团队识别和维护。
在DNS层面实现流量分流,避免单一域名的并发连接限制。
各Bucket的缓存策略、安全配置、监控告警可独立设置。
独立的监控体系能够精确定位性能瓶颈和异常流量。
方式二:统一域名路径路由
当多个Bucket分属不同业务或应用,却希望对外提供统一访问入口时,可配置单一CDN加速域名,利用规则引擎将不同访问路径的请求回源至指定Bucket。以加速域名oss.example.com回源两个Bucket(cdn-bucket1、cdn-bucket2)为例:
添加源站信息:将
cdn-bucket1和cdn-bucket2添加到加速域名的源站信息中,并为域名配置CNAME解析规则。添加路径规则:在加速域名的中,添加两条URL路径规则,分别匹配
http://oss.example.com/bucket1/*和http://oss.example.com/bucket2/*。规则名称
类型
匹配运算符
匹配值
bucket1(可自定义)
URI
包含其中任意一个
/bucket1/*bucket2(可自定义)
URI
包含其中任意一个
/bucket2/*添加条件源站:在加速域名的基本配置中新增条件源站,按路径规则匹配源站。
规则条件
源站地址
bucket1
cdn-bucket1.oss-<region-id>.aliyuncs.combucket2
cdn-bucket2.oss-<region-id>.aliyuncs.com指定源站回源HOST:在加速域名的回源配置中添加指定源站回源HOST,确保回源请求正确到达目标Bucket。
源站类型
源站地址
回源HOST类型
回源HOST
规则条件
基础源站地址
cdn-bucket1.oss-<region-id>.aliyuncs.com基础源站域名
cdn-bucket1.oss-<region-id>.aliyuncs.combucket1
基础源站地址
cdn-bucket2.oss-<region-id>.aliyuncs.com基础源站域名
cdn-bucket2.oss-<region-id>.aliyuncs.combucket2
重写回源URL:在加速域名的回源配置中添加重写回源路径,在回源时自动剥离虚拟路径(如
/bucket1),使回源请求路径与Bucket内对象的实际存储路径一致。待重写的Path
目标Path
执行规则
^/bucket1/(.*)$/$1break
^/bucket2/(.*)$/$1break
效果验证:配置完成后,即可使用单一CDN加速域名根据不同路径访问不同的OSS Bucket资源。如访问
http://oss.example.com/bucket1/example.jpg,将回源到cdn-bucket1根目录下的example.jpg文件。
跨账号私有回源配置
当业务需要跨账号回源私有Bucket时,如使用A账号的CDN加速域名回源B账号的Bucket,可在CDN加速域名中开启阿里云OSS私有Bucket回源时选择跨账号回源实现。
添加跨账号Bucket源站:新建CDN加速域名添加源站信息时,域名选择OSS自定义源站,并输入需要回源的Bucket域名。
开启跨账号私有Bucket回源:在CDN加速域名的回源配置中,开启阿里云OSS私有Bucket回源,回源类型选择跨账号回源或同账号回源,并输入具有目标Bucket访问权限的AccessKey ID和AccessKey Secret。
应用于生产环境
最佳实践
安全传输:启用HTTPS
为加速域名配置HTTPS证书,并启用强制HTTPS跳转,实现客户端到CDN节点间的数据加密传输。HTTPS不仅能有效防止数据在传输过程中被窃取或篡改,还能避免浏览器地址栏出现不安全警告,提升用户信任度与品牌形象。
证书配置位置说明
访问方式 | 证书配置位置 | 说明 |
直接访问OSS域名 | OSS控制台 | 在Bucket的中配置 |
通过CDN加速域名访问 | CDN控制台 | 在加速域名的HTTPS配置中配置 |
泛域名证书(如
*.example.com)只能匹配二级域名,三级域名(如img.cdn.example.com)需要单独申请证书。OSS不支持HTTP/2协议,如需使用HTTP/2,请通过CDN加速访问。
性能优化:配置综合缓存策略
缓存策略是CDN性能的核心要素,应包含缓存有效期和参数处理两个维度。
设置缓存有效期
通过配置CDN缓存过期时间,最大化缓存命中率:
文件类型 | 建议缓存时间 | 说明 |
不常更新的静态文件(图片、音视频、安装包) | 1个月以上 | 减少不必要的回源请求 |
频繁更新的静态文件(JS、CSS) | 数小时~数天 | 配合版本号(如 |
动态文件或API(PHP、JSP) | 0秒(不缓存) | 确保每次请求获取最新内容 |
配置参数处理以启用图片处理
OSS的图片处理(如缩放、裁剪、水印)是高频使用功能。默认情况下,CDN为最大化缓存命中率会过滤全部参数,这会导致?x-oss-process类的图片处理指令失效。为正常使用此功能,需在CDN控制台加速域名的性能优化中修改忽略参数配置。
业务场景 | 忽略参数配置 | 说明 |
纯静态资源分发 | 过滤全部参数 | 最大化缓存命中率 |
使用OSS图片处理 | 保留全部参数或保留指定参数 | 确保图片处理指令生效 |
带版本号的资源 | 保留指定参数 | 支持版本号更新缓存 |
可用性保障:使用资源预热与自动刷新
启用缓存后,源站文件的更新将无法立即同步到CDN边缘节点。建议采用以下策略:
资源预热:在版本发布或运营活动前,使用CDN的刷新和预热资源功能将热点资源提前分发至全球节点,避免上线瞬间大量回源请求冲击源站。
缓存自动刷新:在Bucket的中为绑定的域名开启CDN缓存自动刷新。当通过API更新OSS文件时,OSS会自动触发CDN刷新任务。
缓存自动刷新仅在CDN加速与OSS Bucket归属同一阿里云账号时有效,且不保证绝对的及时性。对于时效性要求极高的场景,建议在更新文件后主动使用CDN的刷新功能。
跨域访问:配置CORS策略
当前端应用需要跨域访问CDN加速的OSS资源时,仅在OSS Bucket上配置CORS规则可能因CDN缓存机制而失效。最佳实践是在CDN层面直接配置CORS相关响应头:
在CDN控制台单击加速域名或操作列的管理。
在中配置响应头参数和响应头值。
自定义响应头参数
响应头值
跨域验证
Access-Control-Allow-Origin
*
开启
Access-Control-Allow-Methods
POST,GET, HEAD, PUT, DELETE
不涉及
Access-Control-Max-Age
3600
不涉及
说明参数设置仅供参考,请结合实际业务场景进行调整。
性能优化:提升大文件与数据传输效率
开启Range回源:对于音视频点播、大文件分发等场景,配置Range回源功能至关重要。它允许CDN节点按需分片请求大文件,可实现视频拖动播放等高级功能,并显著减少回源流量和首屏等待时间。
开启页面优化或Gzip压缩功能会改变文件的
Content-Length和Content-MD5值。如果业务逻辑依赖这些值进行校验,请谨慎开启。若同时开启页面优化和Gzip压缩功能,页面优化功能将失效,CDN只会对文件进行Gzip压缩。
平滑上线:零停机域名切换
在将现有业务从OSS Bucket域名切换至CDN加速域名时,应采用分阶段切换策略:
准备阶段:完成CDN加速域名的所有配置,并在测试环境中充分验证其功能和性能表现。
灰度发布阶段(建议在业务低峰期):采用灰度发布的方式将部分业务流量切换至CDN加速域名,通过逐步放量降低切换风险。
验证阶段:密切监控业务访问日志和错误率,分析响应时间、成功率等关键指标,确保服务正常。
全量发布阶段:经过充分验证后,将全量业务流量切换至CDN加速域名。
回滚预案:如遇问题,立即回滚至Bucket域名,并详细分析问题根因后重新部署。
风险防范
流量盗用防护:配置Referer防盗链与URL鉴权
为防止资源被非法站点盗用,产生不必要的流量费用和带宽消耗,必须配置安全防护策略:
Referer防盗链:配置Referer黑/白名单,通过校验HTTP请求头中的Referer字段,仅允许来自指定域名的访问。
URL鉴权:针对私有权限的OSS Bucket,开启CDN的私有Bucket回源后,CDN节点即获得访问授权,这使得原本需要签名的私有资源能通过CDN域名被公开访问。为恢复对私有资源的安全控制,建议在CDN层面启用配置URL鉴权。
配置CDN加速后,盗链请求可能直接命中CDN缓存而不回源到OSS,从而绕过OSS的防盗链验证。为确保防护有效,必须在CDN层面也配置防盗链规则。
流量异常监控与告警
建议在云监控中为CDN加速域名设置报警规则,当CDN流量异常增长时及时发现。
回源链路保障:配置回源SNI与回源HOST
确保CDN与OSS之间的回源通信稳定且安全,是服务可用性的关键保障。
配置回源SNI
为避免不带SNI(Server Name Indication)的CDN回源请求导致OSS访问异常,需在CDN中配置默认回源SNI,并设置其与回源HOST相同(回源HOST默认为加速域名)。当回源请求携带SNI时,OSS能够在TLS握手阶段精准识别业务域名,从而返回匹配的证书。若OSS接收到不携带SNI的请求,将无法进行业务域名的精准识别,可能触发更严格的流量限制。
隐藏源站信息
默认情况下,CDN使用Bucket域名回源。当回源出错时(如文件不存在),错误信息中可能暴露OSS Bucket域名,存在安全风险。为隐藏源站信息,可按以下步骤将回源HOST修改为CDN加速域名:
在Bucket列表页面单击目标Bucket名称,然后在中将CDN加速域名绑定到Bucket。
在CDN控制台单击目标加速域名,然后在中单击修改配置,将域名类型修改为加速域名。
行为审计与排障:启用访问日志
生产环境必须具备完善的日志记录能力,以便进行安全审计、性能分析和故障排查。建议在CDN控制台配置实时日志推送,将访问日志投递到日志服务SLS。通过SLS,可以对访问行为、流量分布、热门资源、错误请求等进行深度分析和监控告警。
计费说明
费用类型 | 说明 |
CDN费用 | 配置CDN加速访问OSS会产生CDN流量费用,详见CDN计费概述。 |
OSS费用 | CDN节点缓存未命中时回源到OSS获取资源,会产生CDN回源流出流量费用,详见CDN回源流出流量。 |
常见问题
为什么CDN回源时出现5xx报错?
5xx错误表示CDN无法成功从OSS源站获取资源,需要从以下方面排查:
排查方向 | 检查内容 |
源站配置 | 检查CDN控制台配置的OSS源站地址是否正确。 |
回源协议 | 如果CDN配置了HTTPS回源或协议跟随回源,请确保源站支持HTTPS访问且SSL证书配置正确。 |
网络链路 | 测试CDN节点或本地到OSS源站的网络连通性。CDN节点是公网节点,源站必须连通公网。 |
源站压力 |
为什么配置静态页面后通过CDN加速访问报错403 Forbidden或You are forbidden to list buckets?
原因分析:此问题通常发生在为配置了静态网站托管的私有Bucket开启CDN加速后。根本原因在于两种访问机制的冲突:
CDN私有回源时会携带签名信息进行身份验证。
OSS静态网站托管的默认首页功能(如访问
/时自动返回index.html)要求访问请求必须是匿名的。
当用户访问加速域名的根目录时,CDN发起带签名的请求访问Bucket根目录。OSS收到签名请求后不会触发静态网站托管逻辑,转而尝试执行ListObjects操作,最终导致403错误。
解决方案:绕过OSS的静态网站托管机制,直接在CDN层面通过重写访问URL实现同样效果:
参数 | 配置值 |
待重写的Path |
|
目标Path |
|
执行规则 | Redirect |
是否可以通过CDN域名上传文件到OSS?
出于安全考虑,不建议通过CDN域名上传文件到OSS。如果CDN被设置为公共写入,任何人无需身份验证即可通过CDN上传文件到OSS,容易受到恶意上传和数据篡改的攻击。建议在限制最小权限的前提下,使用OSS域名上传文件。
使用CDN加速后OSS下行流量是否会变少?
如果CDN缓存的文件被频繁命中,OSS的公网流出流量会显著降低,从而减少OSS流量成本。
CDN缓存文件被频繁命中的前提是,业务场景中的部分数据在某段时间内被频繁访问,例如网站访问、图片文件下载、游戏发行等场景。缓存命中率越高,回源流量越少,成本节省效果越明显。
如何统计文件的真实访问次数?
启用CDN加速后,OSS的访问日志将无法记录由CDN缓存直接响应的终端用户访问请求,可通过以下方式统计:
数据范围 | 获取方式 |
30天内的日志数据 | 通过下载CDN的离线日志进行查看和分析。 |
超过30天的日志数据 | 在CDN中配置实时日志推送后,在CDN实时日志数据统计页面查看和分析。 |
访问报错403 Forbidden如何排查?
403错误可能来自OSS或CDN的权限拦截,建议直接访问OSS默认域名观察是否正常。
正常:问题在CDN侧,需排查CDN的Referer防盗链、URL鉴权、私有Bucket回源是否开启等配置。
也报403错误:问题在OSS侧,需要排查OSS的Bucket ACL、Referer防盗链、Bucket Policy等配置。
为什么业务切换到CDN后OSS仍产生下行流量费用?
可能原因:
存在直接访问OSS的请求:检查业务代码或第三方系统集成中是否有未替换为CDN加速域名的OSS域名。
CDN缓存未命中导致回源:回源会产生OSS的CDN回源流出流量。检查CDN缓存命中率,如果较低请优化缓存配置。
Bucket为公共读被恶意访问:如果Bucket权限为公共读,可能被恶意访问。建议在业务允许的情况下将Bucket设为私有并开启CDN私有回源。