DNS A / CNAME 是什么

A 记录指向 IP,CNAME 指向另一个名字。这一句话解决独立开发者大部分 DNS 困惑,剩下 10% 看本文,附 Vercel、Firebase、Netlify 的确切填值。

每个 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.comA(或 ALIAS)@ 或留空host 给的 IP(如 76.76.21.21
www 子域名CNAMEwwwhost 给的主机名(如 cname.vercel-dns.com
其它子域名(appblogCNAMEappbloghost 给的主机名
IPv6(仅当 host 支持)AAAA同 A一个 IPv6 地址

根域名为什么必须用 A:DNS 规范(RFC 1034)禁止 CNAME 和 apex 必带的其它记录(如 SOA、NS)共存。那些「允许」你在 apex 用 CNAME 的服务商,其实是在背后偷偷换成了一条扁平化记录(见下文)。

三大 host 的确切填值(2026 年 6 月)

务必从你自己的 host 后台复制 Value——下面是官方公布的默认值,但有些 host 会给你一个项目专属的值。

Hostapex(yoursite.comwww 子域名额外步骤
VercelA → 76.76.21.21(或 ALIAS 指向它给的 *.vercel-dns.comCNAME → cname.vercel-dns.com(较新项目会给 cname.vercel-dns-NNN.com无;Vercel 不支持 AAAA/IPv6
Firebase HostingA → Add custom domain 向导里显示的 IP(如 199.36.158.100同样用 A 记录指向相同 IP,不是 CNAME向导给的一条 TXT 所有权记录
NetlifyA → 75.2.60.5,或 ALIAS/ANAME 指向 apex-loadbalancer.netlify.comCNAME → your-site.netlify.app

注意特立独行的那个:Firebase 让你在 apex 和 www 都放 A 记录(指向同一组 IP),再加一条 TXT 验证记录。Vercel 和 Netlify 用的是经典的「根域名放 A、www 放 CNAME」分工。

来源:Vercel DNS 文档Firebase 自定义域名文档Netlify 外部 DNS 文档

实操步骤

  1. 先确定要指什么:根(yoursite.com)还是子域名(wwwapp)。
  2. 看 host 的说明。给的是 IP 就用 A 记录,给的是主机名就用 CNAME。
  3. 登录真正管你 DNS 的那一方——Cloudflare、注册商自带 DNS、Route 53 等。(nameserver 指向谁,记录就归谁管,在别处改都不生效。)
  4. 根域名:加一条 A 记录,Name 填 @(或留空),Value 填它给的 IP。
  5. www:加一条 CNAME,Name 填 www,Value 填它给的主机名(如 cname.vercel-dns.com)。
  6. 把 host 要求的 TXT 验证记录也加上(Firebase 必加,其它 host 视配置而定)。
  7. 保存。Vercel 自管的 DNS 大约 60 秒生效;外部服务商取决于 TTL。
  8. dig yoursite.com +short(Mac/Linux)或 nslookup yoursite.com(任何 OS)验证,结果应和你设的一致。
  9. 回 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)。先排查这三点,再怀疑记录本身。

相关阅读

标签: #独立开发 #域名 #DNS #入门