记录一次 Cloudflare 把我“干”到国外,当然,本人表示对此负全部责任!
Hello!大家好,我是猫猫鱼。
Vercel + Cloudflare 的“甜蜜陷阱”
我的网站部署在 Vercel 上,域名解析和 CDN 使用的是 Cloudflare。在出问题之前,我做了一个看似很平常的操作:
- Vercel 设置: 在 Vercel 的 Domains 设置中,我使用 重定向 (Redirects to) 功能,将域名
A (maomaoyu.coffee)
重定向到域名B (top4ai.com)
。 - 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.coffee
和 www.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 缓存问题,测试真的太麻烦了!
如果你也有过类似的经历或者对此问题有任何见解,欢迎在评论区留言交流!