Back

记录一次 Cloudflare 把我“干”到国外,当然,本人表示对此负全部责任!

MasterMao

Hello!大家好,我是猫猫鱼。

Vercel + Cloudflare 的“甜蜜陷阱”

我的网站部署在 Vercel 上,域名解析和 CDN 使用的是 Cloudflare。在出问题之前,我做了一个看似很平常的操作:

  1. Vercel 设置: 在 Vercel 的 Domains 设置中,我使用 重定向 (Redirects to) 功能,将域名 A (maomaoyu.coffee) 重定向到域名 B (top4ai.com)
  2. Cloudflare 设置: 在 Cloudflare 中,我配置了以下 DNS 记录:
    • A maomaoyu.coffee: 76.76.21.21 (已代理)
    • CNAME www.maomaoyu.coffee: maomaoyu.coffee (已代理)(多次测试下来我怀疑就是这里出了问题,设置目的是为了让www跳转@)

问题现象:域名被“流放”国外

万万没想到,就是这个简单的配置,竟然导致了我的域名 B (top4ai.com) 被解析到了七八个国外的 IP 地址。这意味着,国内用户完全无法访问我的网站!

问题关键: 我怀疑是 Cloudflare 的“已代理”设置和 Vercel 的重定向机制之间出现了某种冲突。由于 DNS 有缓存,测试这个 bug 真的非常麻烦。

我的“亡羊补牢”之路

为了解决这个问题,我尝试了以下两种方法:

1. (无效果) Cloudflare 重定向规则

我首先尝试在 Cloudflare 的 规则 - 重定向规则 中,设置两条 301 重定向规则,将 maomaoyu.coffeewww.maomaoyu.coffee 都指向 top4ai.com

  • 规则配置:
    • 主机名 等于 www.maomaoyu.coffee
    • 表达式预览: (http.host eq "www.maomaoyu.coffee")
    • URL 重定向:
      • 类型: 动态
      • 表达式: concat("https://top4ai.com", http.request.uri.path)
      • 状态代码: 301
  • 结果: 几个小时后,问题再次出现,域名又被解析到国外 IP。此方法宣告无效。

总结: 直接在 Cloudflare 设置重定向规则,并没有解决问题。

2. (有效果) 调整 Cloudflare 和 Vercel 的 DNS 设置

在各种尝试无果后,我调整了 Cloudflare 和 Vercel 的 DNS 设置:

  • Cloudflare 配置:
    • A maomaoyu.coffee: 76.76.21.21 (已代理)
    • CNAME www.maomaoyu.coffee: cname.vercel-dns.com (已代理)
    • A top4ai.com: 76.76.21.21 (仅DNS)
    • CNAME www.top4ai.com: cname.vercel-dns.com (仅DNS)
  • Vercel 配置:
    • 在 Vercel 中设置 301 重定向。

结果: 经过一天的观察,目前重定向和访问都正常。但 top4ai.com 域名我完全不敢开启 Cloudflare 的“已代理”,只要一开,就会被分配到七八个国外 IP。

总结:top4ai.com 的 Cloudflare 代理关闭,使用 Vercel 的重定向,问题得到解决。

困惑与求助

为什么一旦我开启 top4ai.com 的 Cloudflare “已代理”,就会被解析到国外 IP?这其中到底是什么原理?希望有大佬能帮忙解惑!

我目前的一些猜测:

  • 可能是 Cloudflare 的代理机制和 Vercel 的重定向机制之间存在某种冲突?
  • 也可能是 Cloudflare 的 DNS 解析机制存在某些我不知道的规则?

另外,我真的需要一个好用的 DNS 测试工具,因为 DNS 缓存问题,测试真的太麻烦了!

如果你也有过类似的经历或者对此问题有任何见解,欢迎在评论区留言交流!