内容提要
文章介绍在不迁移域名NS的情况下,通过Cloudflare for SaaS以CNAME接入实现国内外分流:国内走腾讯云CDN和COS,境外走Cloudflare CDN,并用R2或Backblaze B2作存储。步骤包括创建R2并绑定自定义域名、订阅SaaS、添加回退源和自定义主机名、配置TXT验证与CNAME解析,再用Worker代理R2或B2,最后设置Worker路由,从而以CNAME访问存储内容。
延伸解读
为什么必须用 Worker 代理存储桶
文章特别指出,仅完成 CNAME 接入和自定义主机名验证后,直接访问生产域名并不能读取 R2 中的资源。原因是 Cloudflare for SaaS 的回退源指向的是绑定在 R2 上的自定义域名,而该域名本身不直接提供对象读取能力。必须再创建一个 Worker,通过绑定 R2 存储桶并编写 GET 请求处理逻辑,才能把路径映射到存储对象。这一步是整条链路能否真正可用的关键,容易被一般教程遗漏。
分流方案的前提与取舍
该方案的核心前提是域名 NS 不转入 Cloudflare,因为作者需要国内 DNS 服务商的分区解析能力,而 Cloudflare DNS 不支持分区解析。代价是配置链路更长:需要同时维护国内 CDN、对象存储、Cloudflare SaaS、Worker 路由等多套设置。文章也说明,对小站点而言 DNSPod、腾讯云 COS/CDN、Cloudflare R2 和 B2 的免费额度基本够用,但超额后 SaaS 按每域名 0.1 USD/月计费。
R2 与 B2 接入的差异点
文章把 R2 作为首选,B2 作为备选,两者在 Worker 代理思路上相近但细节不同。R2 的 Worker 代码只保留 GET,并需绑定名为 MY_BUCKET 的存储桶变量;B2 则依赖 AWS 签名逻辑,需要配置 ALLOW_LIST_BUCKET、应用 Key、Key ID、B2_ENDPOINT 和 BUCKET_NAME 等环境变量。此外,B2 的 Worker 路由需要添加两条,除生产域名外还要把回退源域名加入路由,这是与 R2 配置的明显区别。
配置时容易忽略的验证与路由细节
文章强调自定义主机名添加后需在自己的 DNS 控制台添加两条 TXT 记录,并等待证书状态和主机名状态都变为有效,之后才能添加 CNAME 解析。Worker 路由则必须填写生产环境使用的域名,而不是 Cloudflare 的回退源域名。这些顺序和命名上的细节如果弄错,即使各步骤看似完成,也可能导致访问失败或证书无法生效,读者应按文中顺序逐项核对状态。
Q&A
如何在不迁移域名NS的情况下,让同一个CDN域名实现国内走腾讯云、境外走Cloudflare的分流?
可以通过Cloudflare for SaaS以CNAME方式接入Cloudflare,同时在国内DNS服务商(如DNSPod)设置分区解析,将国内流量指向腾讯云CDN,境外流量通过CNAME指向Cloudflare的回退源,从而实现分流。
Cloudflare for SaaS的免费额度是多少?
每个Cloudflare账户可以有100个域名免费额度,超额后每个域名按0.1 USD/月收取费用。
配置Cloudflare for SaaS时,回退源和自定义主机名分别怎么设置?
回退源填写绑定在R2上的自定义域名(如images.example.com),自定义主机名填写生产环境使用的CDN域名(如e.content-delivery-network.cn),验证方式推荐TXT验证,需在DNS控制台添加2条TXT记录,等待证书和主机名状态变为有效。
为什么配置完CNAME后还是无法访问R2里的资源?
因为仅配置CNAME还不够,需要用Cloudflare Worker代理R2。Worker代码中通过绑定R2存储桶(变量名如MY_BUCKET)并处理GET请求来返回对象内容,部署后还需在域名下添加Worker路由,指向生产环境域名(如e.content-delivery-network.cn/*)。
如何用Cloudflare Worker代理Backblaze B2存储桶?
需新建Worker,使用包含AWS签名逻辑的代码,设置环境变量ALLOW_LIST_BUCKET、B2_APPLICATION_KEY、B2_APPLICATION_KEY_ID、B2_ENDPOINT和BUCKET_NAME。然后手动添加CNAME解析到B2的S3 URL(如b2.example.com),配置回退源和自定义主机名,最后添加两条Worker路由:b2.example.com/*和e.content-delivery-network.cn/*。
使用Cloudflare R2和Backblaze B2作为存储桶,免费额度分别是多少?
Cloudflare R2免费额度为10G/月存储和100万/1000万请求;Backblaze B2免费额度为10G/月存储,且与Cloudflare有流量联盟。