华为云DNS搭配Cloudflare实现博客分地区访问

华为云 DNS + Cloudflare:让博客大陆直连,境外走 CDN

当前网站访问架构

flowchart TD
    V["访客访问<br/>xianou.com / www.xianou.com"]
    DNS["华为云 DNS<br/>根据地区线路返回解析结果"]
    CN["中国大陆<br/>全网默认 A 记录 → VPS IP"]
    OVERSEA["大陆以外<br/>境外 CNAME → cdn.zha.me"]
    CF["Cloudflare 边缘节点<br/>使用博客域名的边缘证书"]
    VPS["日本 VPS · 1Panel / OpenResty<br/>保留现有源站证书"]
    SITE["xianou.com:301 跳转到 www<br/>www.xianou.com:WordPress 博客"]
    V --> DNS
    DNS --> CN
    DNS --> OVERSEA
    CN -->|HTTPS 直连优化线路| VPS
    OVERSEA --> CF
    CF -->|需回源的请求:HTTPS,保留博客域名| VPS
    CF -.->|可缓存资源命中时直接响应| V
    VPS --> SITE
    classDef direct fill:#eaf7f3,stroke:#209889,color:#192b41
    classDef edge fill:#fff5e7,stroke:#e89026,color:#192b41
    classDef origin fill:#eaf0fc,stroke:#708cbd,color:#192b41
    class CN direct
    class OVERSEA,CF edge
    class VPS,SITE origin

方案背景

我的博客部署在日本 VPS,服务器线路对中国大陆访问做过优化。我希望大陆访客直接访问服务器,大陆以外的访客通过 Cloudflare,同时保留华为云 DNS 和 1Panel 上现有的网站配置。

这篇文章记录具体做法,根域名和 www 都可以配置分流,原来的“根域名 301 跳转到 www”也可以继续使用。

本文整理于 2026 年 10 月 21 日,基于我的实际配置和测试结果。文中的域名仅作示例,请替换成自己的域名。

一、先看懂这套方案

最终的访问方式如下:

中国大陆访客 → 日本 VPS → 博客
大陆以外访客 → Cloudflare → 日本 VPS → 博客

我们需要两个域名:

用途 本文示例 DNS 放在哪里
博客域名 xianou.com、www.xianou.com 保留在华为云
辅助域名 zha.me 托管到 Cloudflare
辅助域名下的接入名称 cdn.zha.me 在 Cloudflare 添加

cdn.zha.me 是境外解析的接入目标,也用于告诉 Cloudflare 源站在哪里。访客正常打开的仍然是博客域名。

不需要把博客域名的 NS 改成 Cloudflare,也不需要修改 WordPress 地址或 1Panel 网站绑定。

这属于 DNS 地区分流,通常根据递归 DNS 的位置以及是否携带访客网段信息判断地区,并不是每次都能精确识别访客实际位置。使用境外公共 DNS、代理或 VPN 时,结果可能不同。

二、开始前准备什么

  1. 博客在源站已经可以正常通过 HTTPS 打开,证书同时覆盖根域名和 www。
  2. 华为云已有根域名和 www 的“全网默认”A 记录,指向 VPS。
  3. 准备另一个可长期使用的辅助域名,以及 Cloudflare 账号。
  4. 截图或导出现有 DNS 记录,方便恢复。

本文使用 Cloudflare for SaaS 的“自定义主机名”功能。Free 套餐目前包含 100 个自定义主机名,启用时需要按页面要求添加付款方式;域名费用和额外付费功能另算。详情以 Cloudflare 套餐说明和启用说明为准。

本文的根域名分流依赖华为云对根域名 CNAME 的支持,不能直接套用到所有 DNS 服务商。如果根域名已有邮件、TXT 等业务,或开启了 DNSSEC,先核对兼容条件;控制台提示冲突时不要删除业务记录强行添加。根域名和 www 如果已有 AAAA 或更具体的地区线路,也需要检查,避免部分访问绕过预期线路。参见华为云记录冲突规则。

三、把辅助域名接入 Cloudflare

登录 Cloudflare 控制台,添加辅助域名 zha.me,选择适用的套餐。

在辅助域名的注册商处,把它的名称服务器改为 Cloudflare 提供的地址。如果辅助域名已有网站或邮箱,先把相关 DNS 记录完整迁入。

等待辅助域名显示“有效 / Active”后,进入它的 DNS → 记录,添加:

类型 名称 内容 代理状态
A cdn 你的 VPS 公网 IPv4 已代理,橙云

这条记录需要保持橙云,TTL 使用自动即可。内容直接填写 VPS IP,不要填博客域名,避免形成回源循环。

这里改的是辅助域名,博客域名 xianou.com 仍使用华为云 DNS。

四、设置 HTTPS 和回退源

仍然在 Cloudflare 的辅助域名下操作。

1. 设置 SSL/TLS

进入 SSL/TLS → 概述,将加密模式设置为:

完整(严格) / Full (strict)

进入 SSL/TLS → 边缘证书,最低 TLS 版本设置为 1.2,TLS 1.3 保持开启。

“完整(严格)”会让 Cloudflare 通过 HTTPS 连接 VPS,并校验源站证书。源站继续使用 1Panel 上已有的有效证书即可。参见官方加密模式说明。

2. 添加回退源

进入 SSL/TLS → 自定义主机名,按页面要求启用 Cloudflare for SaaS。

找到 回退源 / Fallback Origin,填写:

cdn.zha.me

只填完整域名,不带 https://、端口或路径。点击添加,等状态变成“活动 / Active”后再继续。

五、添加根域名和 www,完成 TXT 验证

1. 分别添加两个自定义主机名

点击“添加自定义主机名”,按下面的设置添加两次:

设置 第一条 第二条
自定义主机名 xianou.com www.xianou.com
最低 TLS 版本 TLS 1.2 TLS 1.2
证书类型 由 Cloudflare 提供 由 Cloudflare 提供
证书验证方法 TXT 验证 TXT 验证
源服务器 默认源服务器 默认源服务器

不用添加泛域名,也不用选择自定义源服务器。默认源服务器会使用刚才设置的回退源。

2. 去华为云添加验证 TXT

展开每个自定义主机名,复制 Cloudflare 给出的 TXT 名称和值,然后到 华为云 → 云解析服务 DNS → 博客域名 → 添加记录集。

主机记录填写规则如下:

Cloudflare 显示的完整名称 华为云主机记录 用途
_cf-custom-hostname.xianou.com _cf-custom-hostname 根域名归属验证
_cf-custom-hostname.www.xianou.com _cf-custom-hostname.www www 归属验证
_acme-challenge.xianou.com _acme-challenge 根域名证书验证
_acme-challenge.www.xianou.com _acme-challenge.www www 证书验证

记录类型选 TXT,线路选 全网默认,TTL 可以设为 300 秒,记录值复制 Cloudflare 页面对应的内容。

华为云输入框右侧会自动补上 .xianou.com,所以不要在主机记录里重复填写完整域名。

页面显示几条验证信息,就按要求添加几条。有些归属验证已完成时,页面可能不再显示该项。

3. 同名 TXT 有两个值怎么办

我实际遇到的情况是:根域名由 SSL.com 签发,显示两个证书验证值;www 由 Google Trust Services 签发,当时只显示一个。

SSL.com 的 RSA 和 ECDSA 证书需要不同的验证值。不要自行判断应该有几个,以当前页面列出的全部值为准。参见Cloudflare 颁发机构说明。

在华为云的同一个 TXT 记录集中,每个验证值单独占一行,用英文半角双引号包裹:

"第一个验证值"
"第二个验证值"

上面只是格式示例,实际字符串从 Cloudflare 复制。不要用中文引号,也不要把两个值拼成一行。参见华为云 TXT 填写规则。

如果同名记录已经有其他值,只追加本次所需值,不能直接覆盖。根域名的值与 www 的值分开填写。

1Panel 申请证书时也可能使用这些 _acme-challenge 名称。不要同时手动触发两边的证书申请;已有任务正在运行时,先等它完成。不要把 _acme-challenge 改成 CNAME 委派,以免影响现有的 1Panel DNS 验证。

4. 等待验证完成

保存 TXT 后,等待 DNS 生效,回到 Cloudflare 刷新。

确认根域名和 www 都满足:

  • 证书状态:有效。
  • 主机名状态:有效。

添加归属验证 TXT 前,可能出现 custom hostname does not CNAME to this zone 提示。先完成页面要求的预验证,不要急着删除原来的 A 记录。两个状态都有效后,再测试并切换境外解析。

六、先测试,再添加境外解析

1. 测试 Cloudflare 接入是否正常

Windows 打开终端,执行:

curl.exe -I -L --connect-to "xianou.com:443:cdn.zha.me:443" --connect-to "www.xianou.com:443:cdn.zha.me:443" https://xianou.com/

请把命令中的两个博客域名和 cdn.zha.me 都替换成自己的实际名称。

这个命令会让本次请求连接 Cloudflare,同时保留博客域名的请求信息和正常证书校验,不修改线上 DNS。

我的正常结果是:

HTTP/1.1 301 Moved Permanently
location: https://www.xianou.com/
Server: cloudflare

HTTP/1.1 200 OK
Server: cloudflare

这说明根域名正确跳转到 www,www 首页通过 Cloudflare 正常响应。它还不能证明地区分流已经生效,分流要在下一步配置后再检查。

2. 华为云新增两条境外 CNAME

保留原来的 A 记录,最终配置如下:

主机记录 类型 线路 记录值 操作
根域名:留空或按控制台填 @ A 全网默认 原 VPS IP 保留
www A 全网默认 原 VPS IP 保留
根域名:留空或按控制台填 @ CNAME 地域解析 → 境外 cdn.zha.me 新增
www CNAME 地域解析 → 境外 cdn.zha.me 新增

新增记录 TTL 可设为 300 秒或控制台允许的相近值。

新增 CNAME 的线路一定选“境外”,不能选“全网默认”。 如果已有同名境外记录,需要先核对用途和冲突,不能盲目追加。

大陆没有匹配境外线路时,继续使用全网默认 A 记录;境外匹配 CNAME 后进入 Cloudflare。这种默认指向公网 IP、境外指向 CDN CNAME 的结构,可参考华为云官方分流示例,不需要购买示例中的 GA 产品。

根域名如果提示记录冲突,先保留原配置核对规则,不要删除邮件等业务记录或关闭 DNSSEC 强行保存。

七、确认分流效果

等待 DNS 缓存更新后,使用多地区检测工具,分别测试根域名和 www。

正常应看到:

检测地区 预期结果
中国大陆 返回 VPS IP
港澳台及其他大陆以外地区 解析到 Cloudflare IP

再用境外 HTTPS 检测确认根域名跳转、www 页面、图片及文章页面都能正常访问,不能只看 Ping 成功。

如果需要恢复原来的直连方式,暂停本次新增的两条境外 CNAME 即可,保留的全网默认 A 记录会继续提供解析。恢复也需要等待 DNS 缓存更新。

八、验证记录和证书续期怎么处理

两个域名的证书和主机名都有效后:

  • _cf-custom-hostname 和 _cf-custom-hostname.www 中,本次归属验证的 TXT 值可以删除。
  • _acme-challenge 和 _acme-challenge.www 中,本次已完成证书订单的 TXT 值可以清理;保留其他仍在使用的值。
  • 暂时保留也可以,旧的证书验证值不代表以后能一直用于续期。

归属验证完成后可以移除 TXT,见官方预验证说明。

两边的证书分别维护:

证书 后续处理
1Panel 源站证书 保持自动续期,确保华为云 DNS API 凭据仍有效
Cloudflare 边缘证书 Cloudflare 自动尝试续期;若出现待验证,按页面添加新的验证值

Cloudflare 对符合条件的非泛域名可能自动使用 HTTP 验证,即使首次选择的是 TXT。不过,本方案只有境外解析到 Cloudflare,不能保证每次自动验证都成功。

建议从到期前约 30 天开始关注状态。如果提示待验证 TXT,就添加当前页面提供的新值,不要等证书过期才处理。参见Cloudflare 续期说明。

原创文章,作者:火鸡味锅巴,如若转载,请注明出处:https://www.xianou.com/79.html

赞 (0)
上一篇 2026年10月20日 下午2:22
下一篇 2026年10月12日 上午9:32

相关推荐

  • JustNews子主题更新日志

    JustNews 子主题更新日志 初期开发 建立 JustNews 子主题,让自定义改动与父主题更新分开维护。 修复标签目录分页,将第二页地址调整为 /tags/page/2/。 …

    网站建设 2026年10月20日
    0074

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注