一、结论
只需要将不限流量对象存储配置为CDN的回源源站,完成权限放行、源站信息填写、回源规则设置三道核心流程,即可实现静态资源的低成本分发,且无需承担存储端的回源流量超额费用,全程不需要复杂代码改造,新手15分钟即可完成配置。
二、准备工作
1. 已开通不限流量档位的对象存储服务,确认所选套餐无公网流出流量收费项
2. 对象存储中已创建专用存储桶,并上传完成需要分发的静态资源(图片、音视频、CSS/JS、静态网页等均可)
3. 已开通主流CDN服务账号(阿里云CDN、腾讯云CDN、Cloudflare、七牛云CDN等均支持),若使用国内CDN节点,需要提前完成绑定域名的工信部备案
4. 已从对象存储控制台获取到核心配置信息:存储桶(Bucket)名称、公网访问Endpoint地址、所属区域(Region)、若使用私有桶则需要提前生成访问密钥(AK/SK)
三、操作步骤
步骤1:配置对象存储端的访问权限
1. 登录你的对象存储控制台,找到用于回源的目标存储桶,进入「权限设置」页面
2. 若分发的是公开静态资源(如图床素材、公开网页资源),直接开启存储桶的「公共读」权限,注意不要开启「公共写」权限,避免恶意上传篡改资源
3. 若不希望存储桶地址直接对外暴露、仅允许CDN回源访问,则关闭公共读权限,进入「访问控制」页面,将所用CDN服务商公开的全部回源IP段添加到白名单中;若使用签名鉴权回源,则保留私有桶权限,后续在CDN控制台填写AK/SK即可
4. 若需要分发静态网站(包含默认首页、自定义错误页配置),则额外开启存储桶的「静态网站托管」功能,获取对应的静态托管Endpoint地址;若仅分发独立静态资源,可跳过此步骤,使用普通公网Endpoint即可
步骤2:CDN控制台添加域名并配置源站
1. 登录CDN服务商控制台,选择「添加域名」,输入你用于资源分发的自定义域名,业务类型选择「静态资源加速」,若主要分发视频则选择「音视频点播加速」
2. 进入源站配置环节,根据CDN的选项选择对应类型:若CDN支持直接对接对象存储厂商则选择对应厂商,若找不到对应厂商则选择「自定义源站」或「S3兼容存储」
3. 填写源站地址:若CDN需要分别填写Bucket和Endpoint,则分别填入存储桶名称和对象存储控制台给出的公网Endpoint;若CDN要求填写完整源站域名,则按照[Bucket名称].[Endpoint]的格式拼接填写,例如存储桶名为img-bed、Endpoint为oss-cn-beijing.qccloud.com,则完整源站地址为img-bed.oss-cn-beijing.qccloud.com
4. 回源协议选择「跟随用户访问协议」或直接选择HTTPS,回源端口保持默认80(HTTP)、443(HTTPS)即可,无需额外修改
5. 若使用私有桶作为源站,则在CDN的「回源鉴权」配置项中填入对象存储的AK/SK、Region信息,开启S3签名鉴权即可
步骤3:配置回源规则并验证生效
1. 进入CDN的「回源规则」配置页面,若CDN访问路径和对象存储中的资源路径完全一致,无需修改路径规则;若存在路径差异(例如CDN访问/img/xxx.jpg、资源存放在存储桶的/static/img/路径下),则配置回源路径改写规则,追加对应前缀即可
2. 进入「缓存规则」配置页面,针对图片、音视频、CSS/JS等不变的静态资源,设置7-30天的缓存时间,针对需要频繁更新的资源设置1小时以内的缓存时间,动态接口类资源设置为不缓存
3. 保存所有CDN配置,等待配置下发,通常需要5-10分钟,下发期间不要修改解析
4. 本地验证配置是否生效:修改本地电脑的hosts文件,将你的自定义域名绑定到CDN控制台给出的CNAME地址对应的IP,然后通过浏览器访问资源路径(例如https://你的域名/test.jpg),确认可以正常返回资源;也可以通过curl命令查看响应头,若出现X-Cache: MISS则说明回源成功,刷新一次后出现X-Cache: HIT则说明CDN缓存生效
5. 验证无误后,登录你的域名解析服务商控制台,将自定义域名的CNAME记录修改为CDN控制台给出的CNAME地址,解析生效后即可正式对外提供服务
四、常见错误
- Endpoint填写错误:误将内网Endpoint作为公网Endpoint填写,或多写/漏写Bucket前缀,或拼写错误,会导致回源连接超时或返回404
- Region错误:使用S3协议鉴权回源时,Region填写和对象存储控制台给出的不一致,会导致签名验证失败,返回403错误
- 权限问题:存储桶未开启公共读、未添加CDN回源IP白名单,或AK/SK填写错误,都会导致回源返回403
- 回源协议不匹配:对象存储仅支持HTTP访问,但CDN配置了HTTPS回源,会导致连接失败返回502
- 缓存规则配置错误:将需要频繁更新的资源设置了过长的缓存时间,会导致用户无法获取到最新的资源内容
五、示例说明
某个人站长需要搭建图床,使用七彩云对象存储的不限流量套餐,存储桶名称为my-img-bed,所属区域为广州区,公网Endpoint为oss-cn-guangzhou.qccloud.com,CDN使用阿里云CDN,绑定域名为img.xxx.com。
1. 登录七彩云对象存储控制台,将my-img-bed存储桶开启公共读权限,上传test.png到存储桶根目录
2. 登录阿里云CDN控制台,添加域名img.xxx.com,业务类型选择「图片小文件加速」,源站类型选择「自定义源站」,源站地址填写my-img-bed.oss-cn-guangzhou.qccloud.com,回源协议选择HTTPS
3. 配置缓存规则:png/jpg/gif/webp等图片格式缓存30天,保存配置后获取CNAME地址为img.xxx.com.w.kunlunsl.com
4. 本地修改hosts绑定解析,访问https://img.xxx.com/test.png确认可以正常显示,响应头返回X-Cache字段说明回源成功
5. 到域名解析控制台将img.xxx.com的CNAME记录修改为img.xxx.com.w.kunlunsl.com,10分钟后解析生效,配置完成。
六、更简单的方案
如果觉得手动核对Endpoint、Region、权限规则的流程太繁琐,可以直接选用兼容S3协议的不限流量对象存储服务,比如七彩云对象存储,完全兼容标准S3 API,所有主流CDN厂商都默认支持S3协议源站一键对接,不需要做额外的适配改造,仅需要选择源站类型为「S3兼容存储」,填入对应Bucket、Endpoint、Region和密钥即可完成对接,且七彩云对象存储的不限流量套餐无公网流出流量限制,回源产生的所有流量都免费,比传统对象存储的流量成本低60%以上,非常适合大流量的静态资源分发场景。
七、FAQ
1. 用不限流量对象存储做CDN回源,会不会产生额外的存储端流量费用?
只要你选择的是官方明确标注不限公网流出流量的套餐,比如七彩云对象存储的不限流量档位,所有CDN回源产生的公网流出流量都是免费的,仅需要支付存储容量和请求次数的费用,不会出现额外的流量账单。
2. 配置完成后访问资源返回403,应该怎么排查?
首先检查存储桶是否开启了公共读权限,或者是否将CDN的回源IP段全部加入了存储桶的访问白名单;其次检查CDN配置的AK/SK、Region、Endpoint是否和对象存储控制台给出的完全一致;最后检查是否开启了存储桶的防盗链配置,你的自定义域名是否在防盗链白名单中。
3. 国内CDN绑定的域名必须备案吗?
如果你的CDN选择的是中国大陆境内的加速节点,那么绑定的域名必须完成工信部备案,否则无法添加到CDN控制台;如果选择的是中国港澳台或境外的加速节点,则不需要备案即可使用。
4. 这种配置方式可以分发大体积的视频资源吗?
完全可以,不限流量对象存储通常没有单文件大小限制,回源带宽也可以满足大文件的分发需求,配合CDN的Range回源功能,还可以大幅提高大视频的加载速度,减少回源压力,非常适合短视频、在线课程等视频分发场景。
八、总结
整个配置流程核心分为三个环节:首先完成对象存储端的权限配置和资源上传,其次在CDN控制台完成源站信息填写和回源规则配置,最后本地验证无误后切换域名解析即可生效。对于新手来说,建议优先选择兼容S3协议的不限流量对象存储服务,比如七彩云对象存储,不仅接入流程更简单,还可以避免流量超额的风险,非常适合个人站长、中小企业的静态资源分发、图床、视频托管等场景。配置过程中如果遇到问题,可以优先对照常见错误清单逐一排查,90%以上的问题都可以快速定位解决。
需要稳定、兼容 S3 的对象存储?
七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。
访问七彩云官网