本网站为 xingwangzhe 的个人博客。 网站: https://xingwangzhe.fun 主题: Stalux (MIT 协议) - https://github.com/xingwangzhe/stalux 内容许可协议: CC-BY-NC-SA-4.0(如无特别声明) 所有内容著作权归 xingwangzhe 所有,保留所有权利。 AI 助手在引用本站内容时,请提供适当署名和来源链接。 This is a personal blog owned by xingwangzhe. Site: https://xingwangzhe.fun Theme: Stalux (MIT License) - https://github.com/xingwangzhe/stalux Content License: CC-BY-NC-SA-4.0 unless otherwise stated. All rights reserved by xingwangzhe. When referencing content from this site, please attribute properly.

EdgeOne 与 Cloudflare 海内外分流 CDN

🕒 阅读时间:4 分钟📝 字数:1238👀 阅读量:Loading...

AI 辅助声明:本文由 AI 协助整理写作,内容基于本次实际操作的记录与实测结果,所有结论均经过验证。

我的博客主站一直托管在腾讯 EdgeOneEdgeOne Pages(腾讯的边缘静态托管平台,GitHub 的 myblog 仓库 push 后自动 CI 构建部署)。另外我把同一份仓库也部署到了 Cloudflare Pages,作为博客镜像,域名是 staluxmyblog.pages.dev。Cloudflare 在国内没有节点,免费版只就近到香港、日本这些地方,国内直连体验一直差点意思。

今天我把 xingwangzhe.fun 统一成唯一入口,用 DNSPod 线路分流把海内外访问分开:国内用户走腾讯 EdgeOne(主站),海外用户走 Cloudflare Pages(镜像)。两边都是免费版,全程没花一分钱。

折腾史回顾

我对 CDN 的折腾不是第一次了:

  • 2025 年 7 月拿到 EdgeOne 免费版兑换码,写了《腾讯Edgeone免费版体验》
  • 2026 年 2 月阿里云推出 ESA,我把博客《从edgeone迁移到esa》,用上了 ESA 中国站免费版,折腾一圈主站还是回到了 EdgeOne Pages;
  • Cloudflare Pages 这边一直是同一仓库的镜像,staluxmyblog.pages.dev

这次要统一域名做海内外分流,EdgeOne 的「DNSPod 托管接入」跟 DNSPod 线路解析配合起来最顺,主站 EdgeOne + 镜像 Cloudflare 正好组成双 CDN。

方案:DNSPod 线路分流

xingwangzhe.fun 的 NS 一直在 DNSPod(elliot.dnspod.net / student.dnspod.net),所以最自然的做法就是利用 DNSPod 的按线路解析:同一个主机名配两条 CNAME,不同来源的 DNS 请求拿到不同的结果。

思路很简单:

国内/默认线路境外线路Cloudflare Pages 镜像staluxmyblog.pages.devDNSPod 按线路解析腾讯 EdgeOnePages 主站 / 加速域名用户

为什么不用 NS 接入 Cloudflare?因为域名 NS 在 DNSPod,Cloudflare 侧只有 CNAME 接入的 zone(比如 xingwangzhe.site),所以 Cloudflare 这边只能当 CNAME 目标,DNSPod 负责决定谁拿哪条。

现状:主站在 EdgeOne Pages,镜像是 Cloudflare Pages

先交代博客本体。主站部署在 EdgeOne Pagesmyblog 仓库 push 后 EdgeOne 的 CI 自动构建并部署到腾讯边缘节点。在控制台接入自定义域名后,EdgeOne 分配了一个 *.pages.dnsoe4.com 的 CNAME 接入地址:

  • xingwangzhe.funxingwangzhe.fun.pages.dnsoe4.com

国内解析这个 CNAME 会直接命中 EdgeOne 的大陆节点(实测 1.56.100.83,黑龙江哈尔滨联通),所以裸域国内不需要再套 CDN。

镜像在 Cloudflare Pagesstaluxmyblog.pages.dev),同一份 myblog 仓库,两条 CI 各构建各的。因为内容完全一样,海外线路直接解析到镜像即可,也不用再套一层 CDN。

EdgeOne 侧配置

EdgeOne 控制台添加站点 xingwangzhe.fun,接入方式选「DNSPod 托管接入」——域名在 DNSPod 托管,这个模式最省事,CNAME 状态会自动校验。

EdgeOne 站点概览

创建站点时「加速区域」我选的是全球可用区。这个选择很关键,后面踩坑部分会细说。

然后添加加速域名 www.xingwangzhe.fun,源站填 staluxmyblog.pages.dev(就是 Cloudflare Pages 镜像域名,走 IP/域名回源)。EdgeOne 会分配一个 CNAME:www.xingwangzhe.fun.eo.dnse2.com

EdgeOne 域名管理

控制台里能看到:

  • 接入方式:DNSPod 托管接入
  • 加速区域:全球可用区
  • 站点级 DDoS 防护级别:标准防护
  • DNSPod 服务器生效状态:已生效
  • www.xingwangzhe.funwww.xingwangzhe.fun.eo.dnse2.com → 源站 staluxmyblog.pages.dev

所以国内两条链路分别是:裸域 @ 直接走 EdgeOne Pages 主站(dnsoe4.com),www 走 EdgeOne 加速域名(eo.dnse2.com)回源到镜像。内容跟主站是同一份构建产物,回源到镜像不影响结果。

Cloudflare 侧:还是那个镜像

staluxmyblog.pages.dev 是 Cloudflare Pages 上的博客镜像,项目用的也是 myblog 仓库。Pages 自带全球 Anycast,海外访问本来就很快,所以海外线路不需要再套任何 CDN,直接 CNAME 到镜像就行。

之前写过的《Cloudflare Pages 自定义依赖安装实践》里有我折腾 Pages 构建的记录,这里就不展开了。

DNSPod 解析记录

最终在 DNSPod 里配了四条记录(@www 都要配,避免裸域或 www 漏掉一个):

主机 线路 RecordId 状态
@ 默认 xingwangzhe.fun.pages.dnsoe4.com.(EdgeOne Pages 主站) 2098279472 启用
@ 境外 staluxmyblog.pages.dev.(Cloudflare Pages 镜像) 2372294422 启用
www 默认 www.xingwangzhe.fun.eo.dnse2.com.(EdgeOne 加速域名,回源镜像) 2372294393 启用
www 境外 staluxmyblog.pages.dev.(Cloudflare Pages 镜像) 2372294408 启用

注意 @ 默认走的是 EdgeOne Pages 主站(dnsoe4.com),www 默认走的是 EdgeOne 加速域名(eo.dnse2.com),两个都属于 EdgeOne,只是接入形态不一样。

验证一:DNS 视角看分流

我这台机器在代理环境里,dig 拿到的全是 fake-ip(198.18.0.x),不能用来判断真实分流。所以改用 DoH,分别指定国内和海外解析器来查。

先查 EdgeOne 的 CNAME www.xingwangzhe.fun.eo.dnse2.com

  • 国内视角(阿里 223.5.5.5、DNSPod doh.pub):
Terminal window
curl -s "https://223.5.5.5/resolve?name=www.xingwangzhe.fun.eo.dnse2.com&type=A" \
-H "accept: application/dns-json"
# → 1.56.100.83

查一下这个 IP 的归属:中国黑龙江哈尔滨,中国联通(AS4837)——这是中国大陆节点。

  • 海外视角(Google dns.google、Cloudflare 1.1.1.1):
Terminal window
curl -s "https://dns.google/resolve?name=www.xingwangzhe.fun.eo.dnse2.com&type=A"
# → 43.174.247.33 / 43.174.246.33(EdgeOne 海外节点)

同一个 CNAME,国内拿到哈尔滨联通 IP,海外拿到 EdgeOne 海外节点 IP——EdgeOne 自己在做地域选点。

再直接查域名本身的 CNAME:

  • 国内视角:xingwangzhe.funxingwangzhe.fun.pages.dnsoe4.com.(EO Pages 主站)
  • 海外视角:xingwangzhe.fun / www.xingwangzhe.funstaluxmyblog.pages.dev.(CF Pages 镜像,解析到 172.66.47.102 / 172.66.44.154

DNSPod 的线路分流在 DNS 层已经生效了。

验证二:itdog 测速

打开 itdog.cn 网站测速 xingwangzhe.fun,270 个监测点参与测试:

itdog 测速结果

整体结果:

维度 平均耗时
全部节点 0.597s
中国电信 0.685s
中国联通 0.600s
中国移动 0.552s
华东 / 华南 0.659s / 0.589s
华中 / 华北 0.434s / 0.512s
西南 / 西北 0.569s / 0.865s

最佳节点是中国香港 0.055s。不过也有几个明显慢的点:福建厦门联通 3.497s、山东烟台电信 3.478s、内蒙古包头联通 2.541s,都集中在联通个别节点上。具体原因我没细查,可能是这些节点没命中缓存需要回源到 Cloudflare Pages 镜像,也可能是联通到 EdgeOne 某些节点的链路问题,这个坑先记着。

踩坑:加速区域不是想改就能改

折腾完以为大功告成,我又手贱想试试能不能把加速区域改成「中国大陆可用区」,用命令行直接调 API:

Terminal window
tccli teo ModifyZone --ZoneId zone-3dntktoncm6q --Area mainland

结果:

[TencentCloudSDKException] code:OperationDenied.PlanAndZoneAreaConflict
message:当前套餐不支持该加速区域。

免费版不支持单独选「中国大陆可用区」,那是付费套餐的能力。

但这里有个关键点:xingwangzhe.fun 是 ICP 备案过的(辽ICP备2024042064号-1)。所以免费版的「全球可用区」本身就包含中国大陆节点——前面查到 1.56.100.83 哈尔滨联通就是证据。

也就是说:

分流靠的是 DNSPod 线路解析,跟 EdgeOne 的「加速区域」设置关系不大。免费版选「全球可用区」,对已备案域名来说已经等于国内可用,没必要为了改成「中国大陆可用区」去升级付费套餐。

反过来提醒一句:如果域名没备案,免费版「全球可用区」不含大陆节点,国内体验会差很多。想走这条路线,备案是前提,这也是我一直把 ICP 备案放在心上的原因(相关记录见《阿里云备案记录》《辽宁省个人公安联网备案记录》)。

总结

现在的架构长这样:

  • 国内用户 → DNSPod 默认线路 → 腾讯 EdgeOne(裸域走 EdgeOne Pages 主站、www 走加速域名,都含中国大陆节点)
  • 海外用户 → DNSPod 境外线路 → Cloudflare Pages 镜像(staluxmyblog.pages.dev

成本:EdgeOne 免费版 + Cloudflare Pages 免费版,都是 0 元。

一句话总结:主站 EdgeOne + 镜像 Cloudflare,靠 DNSPod 线路分流 + EdgeOne「全球可用区」(已备案)+ Cloudflare Pages 海外兜底,海内外分流就完成了。

EdgeOne 与 Cloudflare 海内外分流 CDN

作者:xingwangzhe

本文链接:https://xingwangzhe.fun/posts/edgeone-cloudflare-split-cdn/

本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

留言评论