你把站从 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.195 和 151.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 签发期间关掉代理。