同域名实现国内外分流:Cloudflare 配合国内 CDN 实操指南
同域名实现国内外分流:Cloudflare 配合国内 CDN 实操指南
建站或者是做图床、文件分发的朋友,经常会遇到一个很典型的 "既要又要" 的场景:咱们国内访问想要走阿里云、腾讯云这些国内 CDN,速度快又合规;而海外用户(或者自己翻墙访问时)希望走 Cloudflare,毕竟 CF 的全球节点强,而且能防 DDoS。
通常的做法是搞两个域名,一个 img.cn 给国内用,一个 img.com 给国外用,代码里还得折腾判断逻辑。其实,利用 Cloudflare 的一个高级功能——自定义主机名(Custom Hostnames),配合国内 DNS 的智能线路分流,我们完全可以用 同一个域名 实现内外有别。
今天就把这套方案盘清楚,不管是自建源站还是用的 OSS 存储都能用上。
核心思路:DNS 做导演,两边各演各的
这套方案的本质不是在应用层做切换,而是在 DNS 解析层 就把流量导开了。
- 国内用户:解析 DNS 得到「国内 CDN 的 IP」 -> 走国内 CDN 链路回源。
- 国外用户:解析 DNS 得到「Cloudflare 的 IP」 -> 走 Cloudflare 链路回源。
这中间有个关键点:Cloudflare 需要允许你使用那个已经在国内备案的域名。这就是「自定义主机名」起作用的地方。
准备工作:两个域名,分工明确
在动工前,你手里得有两个域名(或者是子域名的组合):
- 出门露脸的域名:比如
cdn.yourdomain.com。- 硬性要求:必须搞定 ICP 备案。这是国内 CDN 接入的红线。
- DNS 解析:必须托管在支持分线路解析的服务商上(比如阿里云 DNS、腾讯云 DNS,普通的 NameCheap 可能不支持这种细分线路)。
- 幕后干活的域名:比如
cdn.your-backup-domain.com。- 硬性要求:必须是托管在 Cloudflare 的域名。
- 作用:它不需要备案,它的任务就是帮 Cloudflare "认领" 那个备案好的域名,并把流量接进来。
第一步:搞定国内 CDN
这一步大家应该都比较熟了。
- 去阿里云 CDN / 腾讯云 CDN 控制台,添加加速域名:
cdn.yourdomain.com。 - 源站信息填写你的真实服务器 IP,或者是 OSS 的 Bucket 域名。
- 开启 HTTPS(通常可以申请免费的单域名证书,或者上传你自己的)。
- 等待配置生效,你会得到一个 CNAME 记录,我们暂且叫它
CNAME_Domestic。
第二步:配置 Cloudflare 接入(关键点)
这里就是很多同学卡住的地方,明明域名备案了,Cloudflare 却提示域名不在账户下。解决办法如下:
- 登录 Cloudflare,选择那个不需要备案的域名
your-backup-domain.com。 - 在 DNS 记录里添加一条 A 记录:
- Name:
cdn - IPv4 address:你的真实源站 IP(和国内 CDN 填的一样)。
- Proxy status:一定要开起那个 橙色小云朵(Proxied)。
- Name:
- 接下来,去左侧菜单找到 SSL/TLS -> 自定义主机名。
- 点击 "Create custom hostname"。
- 先点击 "Fallback Origin",填入刚才建好的
cdn.your-backup-domain.com。这一步告诉 CF:如果我要加的域名没单独配置,就往这儿指。 - 再点击 "Add custom hostname",填入你的大牌域名:
cdn.yourdomain.com。 - Cloudflare 会让你去 DNS 记录里加一条 TXT 记录来验证所有权。照做就是了。
- 验证通过后,在 Cloudflare 里给这个新加的主机名开启 Always Use HTTPS。
原理剖析:此时,Cloudflare 知道了 cdn.yourdomain.com 是合法的,并且它可以通过 cdn.your-backup-domain.com 代理到你的源站。即使 yourdomain.com 的 NS 记录根本不在 Cloudflare,这招也管用。
第三步:DNS 智能分流,一锤定音
最后一步,去管理 yourdomain.com 的 DNS 控制台(比如阿里云 DNS)。
修改 cdn.yourdomain.com 的解析记录,设置两条不同的线路:
| 线路类型 | 记录类型 | 记录值 |
|---|---|---|
| 境内(或 中国联通/电信/移动) | CNAME | CNAME_Domestic (第一步得到的) |
| 境外(或 默认) | CNAME | cdn.your-backup-domain.com (第二步建的) |
配置完成后,流程就是这样的:
- 国内用户访问:DNS 服务器一看 IP 是国内的,直接返回阿里云 CDN 的地址。流量走国内专线,嗖嗖快。
- 海外用户访问:DNS 服务器一看 IP 是国外的,返回
cdn.your-backup-domain.com。由于这个域名在 Cloudflare,流量直接被 CF 接管,走全球加速网络。
对象存储(OSS/COS)特别说明
如果你用的是阿里云 OSS 或者腾讯云 COS 当图床,这套方案有一个 巨大的隐藏福利。
通常情况下,你想让 OSS 绑定自定义域名,那个域名必须备案。但是在这个方案里:
cdn.yourdomain.com是备过案的,符合国内 CDN 和 OSS 的绑定要求。- 海外走 Cloudflare 时,并不需要 OSS 端去绑定
your-backup-domain.com。Cloudflare 只是作为一个反向代理,发起请求时 Header 里带上 Host 为cdn.yourdomain.com,OSS 就能认出来并响应。
避坑指南:如果在配置 CDN 或 CF 回源时遇到 403 AccessDenied 或 NoSuchBucket,请务必检查 回源 Host 设置。
- 国内 CDN 回源 Host:通常设为
cdn.yourdomain.com(假设你在 OSS 绑定了这个域名)。 - Cloudflare 回源 Host:在
Fallback Origin设置里,或者 Page Rules 里,确保发起给源站的请求 Host 也是cdn.yourdomain.com,否则 OSS 可能会拒绝访问。
总结
这套 "Cloudflare + 国内 CDN + DNS 分流" 的组合拳,非常适合图片 CDN、软件下载站、静态资源加速等场景。
- 优点:用户体验无感(链接不变),国内速度飞快,国外也很稳,还能利用 CF 的免费 WAF 防护。
- 成本:主要成本在国内 CDN 流量费(如果是 OSS 内外网流量还得注意),Cloudflare 的自定义主机名功能虽然是付费版功能(如果你有企业版最好),或者通过特定的合作伙伴计划可以使用,但为了省去维护两套代码的成本,这通常是一笔划算的买卖。
如果你手上正好有一个备案域名和一个闲置的 Cloudflare 托管域名,不妨试试这种高可用架构吧!

评论已关闭