每个 host 给你的 DNS 说明,方言都不一样:「加一条 A 记录到 76.76.21.21」或「把 CNAME 指到 cname.vercel-dns.com」。如果这两句对你像天书,说明你还没见过 DNS 的「一页模型」。本文就是这一页,并附上截至 2026 年 6 月,三大独立开发者 host(Vercel、Firebase、Netlify)要求填的确切值。
一句话结论
A 记录把一个名字映射到 IPv4 地址;CNAME 把一个名字映射到另一个名字。根域名 yoursite.com 用 A 记录(或 ALIAS),子域名如 www.yoursite.com 用 CNAME。host 明确告诉你用哪个时,听 host 的,别套经验法则。两个坑导致了绝大多数失败:根域名不能放普通 CNAME,同一个 name 不能同时有 A 和 CNAME。
记录到底是什么
DNS 把名字(yoursite.com)翻译成地址(93.184.216.34),浏览器才知道往哪连。一条「记录」就是你域名 zone 里执行这段翻译的一个条目。独立开发者 99% 的时间只碰两种:
- A —— 把名字指向 IPv4 地址,例如
yoursite.com → 76.76.21.21。 - CNAME —— 把名字指向另一个名字,例如
www.yoursite.com → cname.vercel-dns.com,resolver 再顺着这个名字查到 IP。
其它(IPv6 用的 AAAA、邮件用的 MX、做验证的 TXT、指 nameserver 的 NS、限定证书颁发机构的 CAA)偶尔才用,其中 TXT 几乎在每个 host 配置流程里都会出现,用来证明域名归你所有。
你正卡在这个问题上吗
下面任何一条对得上,就该看本文:
- 在 Vercel / Firebase / Netlify 添加域名,提示「Invalid Configuration」「verification pending」或「Needs DNS records」。
- 配完打开域名,得到「无法访问此网站」/
DNS_PROBE_FINISHED_NXDOMAIN。 www.yoursite.com能通,但裸域yoursite.com不行(或反过来)。dig yoursite.com返回错的 IP,或者干脆没结果。
规则一张表讲清
| 你要指的是 | 记录类型 | Name 填 | Value(示例) |
|---|---|---|---|
根域名 / apex(yoursite.com) | A(或 ALIAS) | @ 或留空 | host 给的 IP(如 76.76.21.21) |
www 子域名 | CNAME | www | host 给的主机名(如 cname.vercel-dns.com) |
其它子域名(app、blog) | CNAME | app、blog | host 给的主机名 |
| IPv6(仅当 host 支持) | AAAA | 同 A | 一个 IPv6 地址 |
根域名为什么必须用 A:DNS 规范(RFC 1034)禁止 CNAME 和 apex 必带的其它记录(如 SOA、NS)共存。那些「允许」你在 apex 用 CNAME 的服务商,其实是在背后偷偷换成了一条扁平化记录(见下文)。
三大 host 的确切填值(2026 年 6 月)
务必从你自己的 host 后台复制 Value——下面是官方公布的默认值,但有些 host 会给你一个项目专属的值。
| Host | apex(yoursite.com) | www 子域名 | 额外步骤 |
|---|---|---|---|
| Vercel | A → 76.76.21.21(或 ALIAS 指向它给的 *.vercel-dns.com) | CNAME → cname.vercel-dns.com(较新项目会给 cname.vercel-dns-NNN.com) | 无;Vercel 不支持 AAAA/IPv6 |
| Firebase Hosting | A → Add custom domain 向导里显示的 IP(如 199.36.158.100) | 同样用 A 记录指向相同 IP,不是 CNAME | 向导给的一条 TXT 所有权记录 |
| Netlify | A → 75.2.60.5,或 ALIAS/ANAME 指向 apex-loadbalancer.netlify.com | CNAME → your-site.netlify.app | 无 |
注意特立独行的那个:Firebase 让你在 apex 和 www 都放 A 记录(指向同一组 IP),再加一条 TXT 验证记录。Vercel 和 Netlify 用的是经典的「根域名放 A、www 放 CNAME」分工。
来源:Vercel DNS 文档、Firebase 自定义域名文档、Netlify 外部 DNS 文档。
实操步骤
- 先确定要指什么:根(
yoursite.com)还是子域名(www、app)。 - 看 host 的说明。给的是 IP 就用 A 记录,给的是主机名就用 CNAME。
- 登录真正管你 DNS 的那一方——Cloudflare、注册商自带 DNS、Route 53 等。(nameserver 指向谁,记录就归谁管,在别处改都不生效。)
- 根域名:加一条 A 记录,Name 填
@(或留空),Value 填它给的 IP。 www:加一条 CNAME,Name 填www,Value 填它给的主机名(如cname.vercel-dns.com)。- 把 host 要求的 TXT 验证记录也加上(Firebase 必加,其它 host 视配置而定)。
- 保存。Vercel 自管的 DNS 大约 60 秒生效;外部服务商取决于 TTL。
- 用
dig yoursite.com +short(Mac/Linux)或nslookup yoursite.com(任何 OS)验证,结果应和你设的一致。 - 回 host 后台,它看到正确记录后应从「pending」变「active」——Firebase 签发 SSL 证书可能要几个小时,最长 24 小时。
A 和 CNAME 在后台长这样
Type Name Value TTL
A @ 76.76.21.21 60
CNAME www cname.vercel-dns.com. 60
TXT @ "vercel-verify=abc123..." 60
保存后怎么验证:
# 检查根域名的 A 记录
dig yoursite.com +short
# 期望: 76.76.21.21
# 检查 www 的 CNAME(先返回目标名字,再返回解析出的 IP)
dig www.yoursite.com +short
# 绕开本机缓存,直接问 Cloudflare 公网 resolver
dig @1.1.1.1 yoursite.com +short
如果 dig 返回的还是旧值,多半是本地 resolver 还在缓存——等 TTL 过期,或者像上面那样直接问公共 resolver。
根域名想用 CNAME:扁平化、ALIAS 和 ANAME
迟早你会想把 apex 指向一个主机名(因为有些 host 只给 CNAME 目标、不给 IP)。标准 DNS 不允许,所以各服务商提供了下面几种变通,它们在查询时都会落到 A/AAAA 的答案上:
- CNAME flattening(扁平化) —— Cloudflare 的叫法。它替你跑完查询、直接返回最终 IP。所有 Cloudflare 套餐的 apex 默认开启;付费套餐还能扁平化全部 CNAME。
- ALIAS —— DNSimple 对同一件事的叫法。
- ANAME —— DNS Made Easy 的叫法。
- HTTPS 记录(RFC 9460) —— 较新的、apex 可用的记录类型,部分 host(包括 Vercel)已支持;但老客户端不一定都认。
如果你的服务商一个都不提供,就退回到普通 A 记录,填 host 公布的 IP。
90% 配置失败都栽在这六个错上
- 根域名放了 CNAME 又没有扁平化/ALIAS——多数服务商直接拒绝。
- 同一个 name 同时有 A 和 CNAME——DNS 不允许两个并存,删掉一个。
- 迁移期 TTL 太长——切换前一天先把 TTL 降到 60–300 秒,新值才传播得快。
- DNS 指了 host,但从没在 host 后台添加这个域名——DNS 是单向的,host 还得主动认领。
- 老记录没删,还指着旧服务商——resolver 会照旧返回,干净删掉。
- nameserver 指向 Cloudflare,却跑去注册商改记录(或反过来)——改在了没人查的服务器上。
常见问题
- 根域名能用 CNAME 吗?:普通 CNAME 不行——RFC 1034 禁止,因为 apex 还得带 SOA/NS 等记录。Cloudflare 的 CNAME flattening、DNSimple 的 ALIAS、DNS Made Easy 的 ANAME,以及较新的 HTTPS 记录都能模拟,并在查询时落到 IP。都没有时,就用 A 记录。
- ALIAS、ANAME、CNAME flattening 有什么区别?:功能上没区别——是三家厂商对「apex 上的类 CNAME 行为」的不同叫法。ALIAS 是 DNSimple,ANAME 是 DNS Made Easy,CNAME flattening 是 Cloudflare,都向客户端返回 A/AAAA 答案。
- TTL 设多久?:迁移期 60–300 秒,改动能快速生效;稳定后设 3600 秒(1 小时)或更高。Vercel 自管 DNS 默认 60 秒。TTL 越短更新越快,查询流量稍多一点。
- Firebase 为什么让
www也用 A 记录、不用 CNAME?:Firebase 用同一组 anycast IP 同时服务 apex 和www,所以让你在两边都放 A 记录(外加一条 TXT 所有权记录),而不是把www经 CNAME 串过去。 - 需要 AAAA 记录吗?:只有 host 给了 IPv6 地址才加。Vercel 不支持 IPv6,所以在它那里完全可以跳过 AAAA。只有 host 明确给了 IPv6 值时才加。
- 记录看着都对,站点还是打不开,为什么?:最常见是缓存(等 TTL 过期,或用
dig @1.1.1.1测)、host 后台里域名还没认领、或者 DNS 改错了地方(注册商 vs. nameserver host)。先排查这三点,再怀疑记录本身。