分发对象存储OSS中的静态资源(如图片、音视频、文档)时,通过配置CDN加速,可以显著提升访问速度、降低网络延迟,并削减流量成本。
工作原理
CDN加速OSS采用分布式缓存架构,将存储在OSS Bucket(源站)中的静态内容主动分发并缓存到遍布全球的CDN边缘节点上,通过就近访问机制实现加速效果。
用户首次请求资源时,请求通过智能DNS解析被路由到地理位置最近且网络状况最优的CDN节点。
该CDN节点检测到本地无此资源缓存,随即向OSS源站发起回源请求获取资源内容。
OSS响应资源内容后,CDN节点根据预设缓存规则将资源存储在本地,同时向用户返回资源内容。
后续用户请求相同资源时,CDN节点直接从本地缓存响应,无需回源获取。这一机制大幅缩短访问路径,降低网络延迟,实现访问加速的同时减少源站负载。
配置CDN加速
配置CDN加速前,请确保已拥有一个已注册的域名或注册一个新域名,支持绑定非阿里云注册的域名。如果加速区域包含中国内地,用于加速的域名必须完成ICP备案。
步骤一:添加CDN加速域名并配置源站
前往CDN控制台,单击添加域名。
选择加速区域和业务类型,填写加速域名,加速域名支持主域名(如
example.cn
)或自定义的子域名(如oss.example.cn
),建议使用子域名以便于管理和扩展。按下图所示添加源站信息,将OSS Bucket域名配置为回源地址,然后单击下一步,完成域名添加。
步骤二:配置CNAME解析规则
通过DNS CNAME记录将加速域名指向CDN分配的CNAME地址,实现域名解析到CDN节点的路由功能。
在推荐配置页面单击打开配置向导,或者返回域名管理页面,将鼠标移动至域名右侧的待配置处,在提示窗口单击打开配置向导。
复制CNAME记录值(如
example.cn.w.kunlunap.com
),该地址用于DNS解析配置。前往云解析DNS控制台,在目标域名操作列单击解析设置。
单击添加记录,按照下方配置列表填写记录信息,其余配置项可保持默认设置。如果已存在CNAME解析记录,请单击解析记录操作列的修改,将记录值修改为复制CNAME记录值。
记录类型:选择CNAME。
主机记录:如果绑定的是主域名(如
example.cn
),填写@
。如果绑定的是子域名,填写子域名前缀,如绑定oss.example.cn
,则主机记录填写oss
。记录值:填写复制的CNAME记录值。
单击确定,然后在弹出的解析变更确认窗口,再次单击确定,完成域名解析配置。
DNS解析的生效时间取决于记录的TTL(生存时间)设置,完全生效通常需要几分钟到几小时。配置后立即访问无效属于正常现象,请耐心等待或尝试清除本地DNS缓存。
步骤三:设置回源私有Bucket
默认情况下,新创建的Bucket读写权限为私有,通过CDN访问时需要开启私有Bucket回源功能,授权CDN节点访问私有资源。如果将Bucket读写权限设为公共读,CDN可直接访问,无需开启此功能。
前往CDN控制台,单击目标域名,然后在左侧导航栏单击回源配置。
在阿里云OSS私有Bucket回源部分按照下图所示开启私有Bucket回源。
开启私有Bucket回源后,CDN将获得访问私有Bucket的授权,并自动在回源请求中添加签名信息。因此,客户端必须使用不包含签名参数的URL(如http://example.cn/dest.jpg
)进行访问。若URL中仍携带Expires
、Signature
等签名参数,将导致OSS鉴权失败,返回403错误。
步骤四:验证加速效果
配置完成后,通过对比测试验证CDN加速域名的性能提升效果。
上传文件到Bucket
在Bucket列表页面单击Bucket名称,然后在文件列表页面单击上传文件,选择需要上传的静态资源(如dest.jpg),按页面提示完成上传。
获取文件访问URL
OSS默认访问URL:在文件列表页面单击目标文件操作列的详情,然后在详情页单击复制文件URL。
CDN加速访问URL:使用CDN加速域名和文件名,构造一个不包含签名信息的访问URL,例如
http://example.cn/dest.jpg
,其中example.cn
为CDN加速域名。
验证加速效果
使用专业的测速平台或工具(如云监控一次性拨测工具),对比OSS默认访问URL和CDN加速访问URL访问同一个文件的加载时间。
说明测试数据仅供参考,因不同的网络环境、地理位置等因素,访问速度提升的比例存在差异。首次检测时,因CDN节点无缓存,需回源获取资源,加速效果可能不明显。请于首次检测后,待CDN缓存生效后再次进行测试,以验证CDN加速效果。
检查缓存命中状态
通过浏览器的开发者工具(F12),查看资源请求的响应头(Response Headers)中
X-Cache
字段的值,判断请求是否命中CDN缓存。若值以
HIT
开头,表示成功命中CDN缓存,实现了加速效果。若值以
MISS
开头,表示未命中CDN缓存,请求已回源至OSS获取资源。
配置回源多个Bucket
当业务架构依赖于多个OSS Bucket存储不同类型或归属的资源时,可以通过以下两种CDN多源配置方案来满足不同的业务需求。
方式一:独立子域名架构
为不同功能或资源类型的Bucket分配独立的、语义化的子域名,并为每个子域名配置单独的CDN加速,如图片资源使用子域名img.example.cn
,音视频资源使用video.example.cn
。语义化的子域名不仅便于开发团队识别和维护,还能在DNS层面实现流量分流,避免单一域名的并发连接限制。
这种架构将不同类型资源完全隔离,各Bucket的缓存策略、安全配置、监控告警都可以独立设置和调优:
图片资源可配置长期缓存策略以提升访问速度
视频资源可启用Range回源支持断点续传
敏感文档可单独启用URL鉴权保障安全
独立的监控体系能够精确定位性能瓶颈和异常流量,实现精细化运营管理,同时降低不同业务间的相互影响风险。
方式二:统一域名路径路由
当多个Bucket分属不同业务或应用,却希望对外提供统一访问入口时,可配置单一CDN加速域名,利用规则引擎将不同访问路径的请求回源至指定Bucket。这样既能统一品牌形象,又能简化域名与SSL证书的维护,降低运维复杂度。采用两个Bucket(cdn-bucket1
、cdn-bucket2
)为例说明配置方法。
添加路径规则
首先,在CDN控制台单击目标加速域名,然后单击 ,按下图所示添加两条URL路径规则,分别用于匹配
http://example.cn/bucket1/*
和http://example.cn/bucket2/*
。其中example.cn
为加速域名,使用bucket1
和bucket2
作为虚拟路径分别指向cdn-bucket1
和cdn-bucket2
,*
为对象在Bucket内的真实路径。配置条件源站
在加速域名的基本配置中配置两个条件源站,将先前创建的路径规则与各自的目标Bucket源站地址进行绑定,实现请求根据路径规则自动路由到对应源站。
指定源站回源HOST
配置条件源站路由后,还需在加速域名的回源配置中为每个源站指定源站回源HOST,确保回源请求能够正确到达目标Bucket。
重写回源URL
为确保源站能正确定位资源,需在加速域名的回源配置中重写回源URL,在回源时自动剥离用于路由的虚拟路径(如
/bucket1
),使回源请求路径与Bucket内的对象实际存储路径保持一致。效果验证
配置完成后,即可使用单一CDN加速域名根据不同路径访问不同的OSS Bucket资源,实现统一入口的多源站访问。
应用于生产环境
最佳实践
安全传输:启用HTTPS
为加速域名配置HTTPS证书,并启用强制HTTPS跳转,实现客户端到CDN节点间的数据加密传输。HTTPS不仅能有效防止数据在传输过程中被窃取或篡改,还能避免浏览器地址栏出现"不安全"警告,提升用户信任度与品牌形象,同时满足现代Web安全标准要求。
性能优化:配置综合缓存策略
缓存策略是CDN性能的核心要素。一个完善的缓存策略应包含缓存有效期和参数处理两个维度,以实现最优的性能和功能兼容性。
设置缓存有效期:通过设置合理的缓存周期,最大化缓存命中率,显著降低回源请求频次和带宽成本。
不常更新的静态文件(如图片、音视频、应用安装包):建议设置较长的缓存时间,例如1个月以上,减少不必要的回源请求。
频繁更新的静态文件(如JS、CSS):根据业务更新频率设置为数小时或数天,并配合版本号(例如
style.v1.1.css
)进行版本管理。动态文件或API(如PHP、JSP):缓存时间应设置为0秒(不缓存),确保每次请求都能获取最新内容。
配置参数处理以启用图片处理:OSS的图片处理(如缩放、裁剪、水印)是高频使用功能。默认情况下,CDN为最大化缓存命中率会“过滤全部参数”,这会导致
?x-oss-process
类的图片处理指令失效。为正常使用此功能,必须前往CDN控制台的 ,修改忽略参数配置。
可用性保障:使用资源预热与自动刷新
启用缓存后,源站文件的更新将无法立即同步到CDN边缘节点。为确保用户能及时访问最新资源,并保障在版本发布等关键时期的服务稳定性,建议采用以下策略。
资源预热:在版本发布或运营活动前,使用CDN的刷新和预热功能将热点资源提前分发至全球节点。这可以避免上线瞬间大量回源请求对源站造成冲击,保障用户首次访问的流畅体验。
缓存自动刷新:在OSS控制台的
页面为绑定的域名开启“CDN缓存自动刷新”。当通过API更新OSS文件时,OSS会自动触发CDN刷新任务,确保用户能及时访问到最新资源。说明此功能不保证绝对的及时性。对于时效性要求极高的场景,建议在更新文件后主动使用CDN的刷新功能。
跨域访问:配置CORS策略
当前端应用需要跨域访问CDN加速的OSS资源时,仅在OSS Bucket上配置CORS规则可能因CDN缓存机制而失效。这是因为浏览器收到的可能是缓存中不含CORS响应头的旧资源。为确保跨域策略稳定生效,最佳实践是在CDN层面直接配置CORS相关响应头。
在CDN控制台页面单击加速域名或加速域名操作列的管理。
在
页面按下图所示配置响应头参数和响应头值。说明参数设置仅供参考,请结合实际业务场景进行调整。
配置完成后,通过CDN节点访问OSS资源时,响应中将稳定包含指定的CORS头,确保跨域请求正常通过浏览器校验。
性能优化:提升大文件与数据传输效率
开启Range回源:对于音视频点播、大文件分发等场景,开启Range回源功能至关重要。它允许CDN节点按需分片请求大文件,不仅能实现视频拖动播放等高级功能,还能显著减少不必要的回源流量和首屏等待时间。
优化数据传输:为减小JS、CSS、HTML等文本文件的传输体积,提高传输效率,可以在CDN控制台开启Gzip压缩或页面优化功能。Gzip压缩会对资源进行压缩后返回,页面优化则会自动删除HTML页面、内嵌JavaScript和CSS中的注释及重复空白符等冗余内容。
说明开启页面优化或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鉴权。该功能通过校验URL中的加密串和时间戳,可有效防止私有内容被恶意下载和传播,实现对资源的精细化访问保护。
回源链路保障:配置回源SNI与回源HOST
确保CDN与OSS之间的回源通信稳定且安全,是服务可用性的关键保障。
配置回源SNI:为避免不带SNI(Server Name Indication)的CDN回源请求导致OSS访问异常,需在CDN中配置回源SNI,并设置其与回源HOST相同(回源HOST默认为加速域名)。当回源请求携带SNI时,OSS能够在TLS握手阶段精准识别业务域名,从而返回匹配的证书,为域名提供访问防护。若OSS接收到不携带SNI的请求,将无法进行业务域名的精准识别,只能返回默认证书。在TLS握手阶段,所有不带SNI的请求会被视为同类处理,可能触发更严格的流量限制,进而影响正常访问。
隐藏源站信息
默认情况下,CDN使用Bucket域名回源。当回源出错时(如文件不存在),错误信息中可能暴露OSS Bucket域名,存在安全风险。
为隐藏源站信息,提升安全性,可按以下步骤将回源HOST修改为CDN加速域名:
行为审计与排障:启用访问日志 生产环境必须具备完善的日志记录能力,以便进行安全审计、性能分析和故障排查。建议在CDN控制台配置实时日志推送,将访问日志投递到日志服务SLS。通过SLS,可以对访问行为、流量分布、热门资源、错误请求等进行深度分析和监控告警,为业务优化和安全防护提供数据支撑。
计费说明
常见问题
为什么CDN回源时出现 5xx
报错?
5xx
错误表示CDN无法成功从OSS源站获取资源,需要从以下方面进行排查:
为什么配置静态页面后通过CDN加速访问报错 403 Forbidden
或 You are forbidden to list buckets
?
原因分析:此问题通常发生在为配置了“静态网站托管”的私有Bucket开启CDN加速后。根本原因在于两种访问机制的冲突:
CDN私有回源:CDN回源至OSS时,会携带签名信息进行身份验证。
OSS静态网站托管:其默认首页功能(如访问
/
时自动返回index.html
)要求访问请求必须是匿名的。
当用户访问加速域名的根目录时,CDN会发起一个带签名的请求访问Bucket的根目录。OSS收到此签名请求后,因其非匿名而不会触发静态网站托管逻辑,转而尝试执行ListObjects
(列举文件)操作。由于访问策略通常禁止此类操作,最终导致返回403 Forbidden
错误。
解决方案:绕过OSS的静态网站托管机制,直接在CDN层面通过配置URL改写规则实现同样效果。
待重写的Path:
^/$
(匹配根目录访问)目标Path:
/index.html
(或实际首页文件名)执行规则:选择Redirect
是否可以通过CDN域名上传文件到OSS?
出于安全考虑,不建议通过CDN域名上传文件到OSS。如果CDN被设置为公共写入,这意味着任何人不需要身份验证或授权都可以通过CDN上传文件到OSS,容易受到恶意上传和数据篡改的攻击。建议在限制最小权限的前提下,使用OSS域名上传文件。
使用CDN加速后OSS下行流量是否会变少?
如果CDN缓存的文件被频繁命中,OSS的公网流出流量会显著降低,从而减少OSS流量成本。
CDN缓存文件被频繁命中的前提是,业务场景中的部分数据在某段时间内被频繁访问,例如网站访问、图片文件下载、游戏发行等场景。缓存命中率越高,回源流量越少,成本节省效果越明显。
如何统计文件的真实访问次数?
启用CDN加速后,OSS的访问日志将无法记录由CDN缓存直接响应的终端用户访问请求,可通过以下方式统计文件的真实访问次数: