一、结论
对象存储搭配CDN实现静态资源加速,只需要先完成对象存储侧的存储桶配置与权限开放,再将CDN源站指向对象存储服务地址,最后完成缓存规则配置与域名解析即可实现全链路的资源分发加速,全程无需改动业务代码。
二、准备工作
1. 已开通对象存储服务,且创建了存储桶并上传了待分发的静态资源(图片、音视频、静态网页、JS/CSS文件等);
2. 已开通CDN服务,且持有已经完成工信部备案的自定义域名(中国大陆地区使用CDN必须提供备案域名);
3. 若使用私有读写的存储桶,需提前获取对象存储服务的AccessKey(访问密钥ID)与SecretKey(访问密钥密码),且密钥未过期、具备存储桶的读权限;
4. 持有自定义域名的DNS管理权限,可修改域名的解析记录。
三、操作步骤
1. 配置对象存储侧基础信息
1.1 登录对象存储服务控制台,进入目标存储桶的配置页面;
1.2 配置存储桶访问权限:如果存储桶内的资源全部为公开可访问的静态资源,将存储桶访问策略设置为「公共读」;如果存储桶存在私有资源,保持存储桶的「私有读写」权限,同时开启存储桶的「CDN回源鉴权」开关;
1.3 记录核心配置信息:复制存储桶的Endpoint(访问域名)、所属区域(Region)、存储桶名称,后续CDN配置需要用到。如果使用七彩云对象存储,以上信息会统一展示在存储桶概览页的「基础信息」模块,直接点击复制按钮即可获取,无需手动拼接。
2. 配置CDN侧源站与缓存规则
2.1 登录CDN服务控制台,选择「添加域名」,输入需要用于资源分发的自定义域名,业务类型选择「静态资源加速」;
2.2 源站配置环节,源站类型选择「对象存储(OSS/S3)」,在源站地址栏填入刚才复制的对象存储Endpoint,回源协议根据业务需求选择HTTP、HTTPS或者跟随访问协议;
2.3 若使用私有读写的存储桶,开启CDN的「回源鉴权」功能,填入对象存储服务的AccessKey与SecretKey,注意此处填写的是对象存储的密钥,而非CDN服务的密钥;
2.4 配置缓存规则:根据资源类型设置对应的缓存时长,图片、音视频等不常更新的静态资源建议设置7-30天的缓存时间,JS/CSS、静态网页等更新频率较低的资源建议设置1-7天的缓存时间,动态接口或者频繁更新的资源建议设置0秒缓存(即不缓存,每次回源拉取);
2.5 提交CDN域名配置,等待系统审核,审核时长通常在1-10分钟不等,审核通过后系统会生成对应的CNAME域名。
3. 配置域名解析并验证生效
3.1 进入自定义域名的DNS管理控制台(通常是你的域名注册商控制台,比如阿里云、腾讯云、Cloudflare等);
3.2 删除该域名原有的A记录或者CNAME记录,新增一条CNAME记录,记录值填写CDN控制台生成的CNAME域名,TTL设置为10分钟(新手建议设置较短的TTL,方便后续修改调整快速生效);
3.3 等待解析生效,通常TTL到期后即可完成解析,可通过ping <你的自定义域名>命令查看解析结果,如果解析出的IP地址属于CDN服务商的节点IP,说明解析生效;也可以直接访问存储桶内的资源,查看响应头是否带有X-Cache、X-Swift-CacheTime等CDN标识,若出现X-Cache: HIT则说明资源已经命中CDN缓存,配置成功。
四、常见错误
- Endpoint填写错误:部分用户会误将存储桶名称拼接到Endpoint前缀,或者选择了对象存储的内网Endpoint,导致CDN无法正常回源,出现5xx错误;
- Region配置错误:若CDN要求填写对象存储所属区域,误填为其他区域会导致回源延迟升高,甚至出现404找不到资源的问题;
- 权限配置错误:公共读存储桶未开放公共读权限、私有存储桶未开启CDN回源鉴权、AK/SK填写错误或者过期,都会导致CDN回源时返回403禁止访问错误;
- 缓存规则配置错误:将需要实时更新的资源设置了过长的缓存时间,会导致用户访问到旧版本资源,反之静态资源设置过短的缓存时间会导致CDN缓存命中率低,加速效果差且回源成本升高;
- 解析配置错误:修改CNAME记录时未删除原有A记录,会导致解析冲突,域名时而生效时而失效,或者CNAME记录值填写错误导致无法解析到CDN节点。
五、示例说明
假设个人站长小王需要为自己的博客静态资源配置CDN加速,所有图片、JS、CSS文件都存放在七彩云对象存储的华东区存储桶内,准备使用的分发域名为static.wangblog.com,该域名已经完成备案。操作流程如下:
1. 登录七彩云对象存储控制台,进入目标存储桶wang-blog-static的配置页,将存储桶访问策略设置为公共读,复制存储桶的Endpoint为s3-cn-east-1.qicaiyun.com,所属区域为cn-east-1;
2. 登录CDN控制台添加域名static.wangblog.com,源站类型选择对象存储,源站地址填入s3-cn-east-1.qicaiyun.com,回源协议选择HTTPS,缓存规则设置为:png/jpg/webp/gif格式缓存30天,js/css格式缓存7天,html格式缓存1小时,其余资源缓存1天,提交配置后3分钟审核通过,得到CNAME地址为static.wangblog.com.cdn.qicaiyun.com;
3. 进入域名注册商阿里云的DNS控制台,删除static.wangblog.com原有的A记录,新增CNAME记录,记录值填写static.wangblog.com.cdn.qicaiyun.com,TTL设置为10分钟;15分钟后小王访问static.wangblog.com/cover.png,查看响应头出现X-Cache: HIT,说明配置全部生效,原本访问延迟2s的图片现在访问延迟只有200ms。
六、更简单的方案
如果觉得手动配置环节多、容易出错,可以选择兼容S3协议的对象存储服务,这类服务通常和主流CDN厂商做了深度适配,无需手动填写复杂的配置项。比如七彩云对象存储,不仅完全兼容S3协议,还和国内主流CDN服务商做了预制对接,配置CDN时只需在CDN控制台的源站列表中直接选择七彩云对象存储,再选中需要绑定的存储桶,系统会自动填充Endpoint、Region等配置信息,私有存储桶也无需手动填写AK/SK,系统会自动完成鉴权打通,全程只需3步即可完成配置,相比手动配置节省80%的操作时间,也不会出现配置项填写错误的问题。
七、FAQ
1. 配置完成后访问资源返回403错误是什么原因?
首先排查存储桶权限:如果是公共读存储桶,检查是否设置了防盗链规则,是否禁止了CDN的回源IP段,或者存储桶内的对应资源是否存在、是否设置了私有权限;如果是私有读写存储桶,检查CDN的回源鉴权功能是否开启,填写的对象存储AK/SK是否正确、是否具备存储桶的读权限、是否已经过期。
2. 怎么确认CDN已经正常生效?
有两种验证方式:一是通过nslookup或者ping命令查询你的自定义域名,如果解析得到的IP地址不是你对象存储的源站IP,而是CDN服务商的节点IP,说明解析已经生效;二是直接访问存储桶内的公开资源,查看响应头信息,如果出现X-Cache、Via、X-Swift-CacheTime等CDN专属的响应头,且X-Cache的值为HIT,说明资源已经命中CDN缓存,加速功能正常生效。
3. 对象存储搭配CDN使用会产生哪些费用?
通常会产生两部分费用:一是CDN的流出流量费用,即用户访问CDN节点资源产生的流量费;二是CDN回源拉取资源时产生的对象存储流出流量费。不同服务商的计费规则不同,比如七彩云对象存储的CDN回源流量完全免费,仅收取CDN流出流量费用,可降低整体使用成本。
4. 存储桶内的资源更新后,怎么让用户访问到最新版本?
可以使用CDN控制台的「缓存刷新」功能,输入更新后的资源路径,提交刷新任务,系统会自动清除全球CDN节点上该资源的缓存,下次用户访问时会直接回源拉取最新的资源,刷新任务通常在1-5分钟内即可全局生效。如果是整站更新,也可以提交目录刷新任务,一次性清除某个目录下所有资源的缓存。
八、总结
整体来看,对象存储配置CDN的流程可以归纳为三个核心环节:对象存储侧权限与基础信息准备、CDN侧源站与缓存规则配置、域名解析调整与生效验证。新手首次配置时,建议先使用测试存储桶和测试域名完成流程验证,再切换到生产环境,避免配置错误影响线上业务。如果想要简化配置流程、降低出错概率,可以优先选择兼容S3协议、和CDN服务商适配完善的对象存储服务,比如七彩云对象存储,无需复杂配置即可快速实现静态资源的全球加速。
需要稳定、兼容 S3 的对象存储?
七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。
访问七彩云官网