同一域名在 Vercel 工作但 Firebase 不行

2026 最新:同一域名绑 Vercel 正常,换 Firebase Hosting 就挂——Firebase 要求更严格的原因与修法。

你把站从 Vercel 迁到 Firebase Hosting。Vercel 完美工作;同样的域名在 Firebase 永远 “Pending verification”,或者验证过了但 SSL 一直发不出来。差别:Firebase 要求很具体的 DNS 记录,Vercel 不需要。Vercel 宽松,抽象掉了很多 DNS 工作;Firebase 像 AWS——给你精确的 IP 和 TXT 值、不匹配就拒绝。修法是精确跟 Firebase 的向导走,并清掉所有 Vercel 时代留下的冲突记录。

常见原因

按命中率从高到低。

1. A 记录错——Firebase 要求特定 IP

Firebase 不接受任意 IP;它给你一对特定的(历史上有 151.101.1.195151.101.65.195 等,会变)。Vercel 的 76.76.21.21 在 Firebase 不工作。

怎么判断:Firebase Console → Hosting → 你的域名 → 看 “What we need” 里的精确 IP。跟你 DNS 里对比。

2. 老 Vercel 记录还在

加 Firebase 的 A 之前忘了删指向 Vercel 的。DNS 现在两个都有,经常返回 Vercel 的 IP。

怎么判断

dig yourdomain.com

结果包含 Vercel 的 IP(76.76.21.21)就是残留。

3. TXT 验证记录没加或没传播

Firebase 在 apex 需要 TXT 验证。跳过了或还没传播,验证就失败。

怎么判断

dig TXT yourdomain.com | grep -i firebase

应显示 Firebase 的验证字符串。

4. CAA 记录挡 Let’s Encrypt

Firebase 用 Let’s Encrypt。你的 CAA 记录(如有)必须允许它。

怎么判断

dig CAA yourdomain.com

有 CAA 就确保允许 letsencrypt.org

5. Cloudflare 代理在首次验证时干扰

Cloudflare 代理遮住了 DNS,Firebase 的验证爬虫看不到。验证失败。

怎么判断:Cloudflare → DNS → Firebase 验证期间域名是代理(橙云)就临时关掉。

6. 多个 Firebase 项目竞争

你把同一个域名加到了两个 Firebase 项目。只能一个持有。

怎么判断:Firebase Console → 检查可能有的其它项目。除了一个,从其它项目移除。

最短修复路径

第 1 步:先从 Vercel 移除域名

Vercel 项目 → Domains → 移除 yourdomain.com。释放 Vercel 对域名的主张、清掉 Vercel 侧冲突。

第 2 步:Firebase Console 加域名

Firebase → Hosting → Add custom domain → 输 yourdomain.com。Firebase 显示:

  • 验证用的 TXT 记录(在 apex)
  • 验证后:必须设的精确 A 记录

第 3 步:在 DNS 提供商加 TXT 记录

精确按 Firebase 给的加 TXT。TTL 300 或 600。

等 5-10 分钟传播。Firebase Console 点 “Verify”。应成功。

第 4 步:加 Firebase 给的 A 记录

验证后 Firebase 显示 A 记录(通常 2 个 IP)。在 apex 加这两个,TTL 300。

删 Vercel 时代的所有老 A 记录。

第 5 步:查 CAA

dig CAA yourdomain.com

有 CAA 就确保包含 letsencrypt.org 或为空。限制性的根据需要加或删。

第 6 步:临时关 Cloudflare 代理

用 Cloudflare 就 Firebase 首次设置期间把 DNS 记录设为 “DNS only”(灰云)。SSL 签发后再开代理。

第 7 步:等 SSL 发放

Firebase 说”最多 24 小时”但通常 15 分钟到几小时。不要反复删了重加——会重置队列。

第 8 步:验证

curl -sI https://yourdomain.com | head -3

应该 HTTP/2 200 + 有效证书。

哪些情况可能不是你操作错了

Firebase SSL 文档说最多 24h,通常 30 分钟。验证记录正确且挂 48h 后,附项目 ID + 域名联系 Firebase 支持。

容易误判的情况

以为 “DNS 就是 DNS”,Vercel 的记录格式哪里都通。不通。每个平台有自己的 DNS 期望——严格按平台向导走,不要用其它文档的值替代。

预防建议

  • 每个托管平台需要的精确 DNS 写进 domain-setup.md
  • 切换到新主机之前先解绑旧主机记录和绑定。
  • Firebase 首次设置时不要开 Cloudflare 代理;SSL 发放后再开。
  • 在 Firebase 点 Verify 前用 dig 验证 TXT 和 A 记录都已传播。
  • 用 Firebase 给的精确 IP 和 CNAME 值,不要近似。

FAQ

  • Firebase 为什么要特定 IP? 它们的 CDN 基础设施通过特定 anycast IP 路由。通用 CNAME 不适合它们的模型。
  • 能用 Cloudflare 代理 + Firebase 吗? 能,初始设置完成后。验证和首次 SSL 签发期间关掉代理。

相关阅读

标签: #域名 #DNS #SSL #排查 #Vercel #Firebase