A vs CNAME 困惑——该用哪种?

主机文档说用 A、教程说 CNAME,apex 上配 CNAME 还会让 MX 邮件失效——本文给一张速查表,告诉你 apex/www/子域分别该用哪种 DNS 记录、迁移时怎么避坑。

给新域名配 DNS。Vercel 文档说”加 A 记录”。YouTube 教程说”用 CNAME”。你在 apex 上试了 CNAME——DNS 提供商拒绝,或者接受了但 MX 记录不工作。这两种记录类型用途有重叠,但有个 RFC 级的约束:CNAME 在同一个 name 上不能跟任何其它记录共存。apex(根)需要其它记录(NS、SOA、MX),所以不能用 CNAME。子域名一般可以。托管平台有精确指令,跟它们的、不要跟通用教程。

常见原因

按命中率从高到低。

1. 在 apex 用 CNAME

DNS 规范(RFC 1912)禁止 zone apex 用 CNAME。提供商拒绝并报 “CNAME conflicts with NS”,或者接受了但 MX 投递失败。

怎么判断:DNS 提供商错误提到 “CNAME and apex”、“CNAME flattening required”,或者根上有 CNAME 且 MX 记录不响应。

2. 跟了两套文档

一套说用 A、一套说 CNAME。你同名都配了。DNS 提供商可能拒绝或静默接受、行为不可预测。

怎么判断:DNS 面板里同一个 name 有两条记录。应该只有一种。

3. 该用 CNAME 时用了 A

某些主机(Vercel www、Netlify)给的 CNAME 目标会解析到负载均衡的 IP。你硬编码 A 记录,主机轮换服务器时你就指向了过期 IP。

怎么判断:主机文档说 “CNAME 到 xxx.vercel-dns.com” 但你设了 A 76.x.x.x。今天可能正常,明天可能挂。

4. 该用 A 时用了 CNAME

Vercel apex 要求 A 76.76.21.21,不是 CNAME。某些平台支持 “ALIAS” 或 “ANAME” 作 apex 上类 CNAME 的选项。DNS 提供商不支持的话只能用 A。

怎么判断:平台不支持 apex CNAME;你在 apex 设了 CNAME;平台拒发 SSL 或显示 “DNS verification failed”。

5. 迁移过程混了记录

换了主机。旧 A 还在、新 CNAME 指向别处。DNS 在两者间轮询或不一致挑选。

怎么判断:同名两条记录指向不同地方。站时新时旧。

6. 用了 ANAME / ALIAS 但 DNS 提供商把它当 CNAME

ANAME 和 ALIAS 是非标准扩展,用来在 apex 做类 CNAME 的事。某些 DNS 提供商实现了,另一些底层把 ANAME 映射成 CNAME 就破坏 MX。

怎么判断:看提供商关于 ANAME 兼容性的文档。测一下加 MX 记录;如果消失或冲突就是 ANAME 实际是 CNAME。

最短修复路径

第 1 步:查你主机平台的要求

去平台文档里找:

平台Apexwww
VercelA 76.76.21.21CNAME cname.vercel-dns.com
NetlifyA 75.2.60.5(或支持的 ALIAS)CNAME yoursite.netlify.app
Cloudflare PagesCloudflare nameserver + flatten CNAMECNAME yoursite.pages.dev
Firebase Hosting控制台给的 A 记录控制台给的 CNAME
GitHub PagesA 185.199.108.153, 109.153, 110.153, 111.153CNAME username.github.io
AWS S3A ALIAS 到 CloudFront/S3CNAME 到 CloudFront

照平台文档的精确值用。

第 2 步:apex 用 A 或 ALIAS/ANAME

DNS 提供商支持 ALIAS/ANAME(Route 53、Cloudflare、DNS Made Easy)就可以在 apex 用它做类 CNAME 行为。否则用 A + IP。

Cloudflare:在 apex 开 “CNAME flattening”。Cloudflare 解析 CNAME 后返回 A 响应。

第 3 步:子域名用 CNAME

wwwblog.yourdomain.comstaging.yourdomain.com——都应该 CNAME 到平台目标。

第 4 步:删冲突记录

同名不要 A 和 CNAME 都有。选一个。

第 5 步:验证

dig yourdomain.com           # 应显示 A
dig www.yourdomain.com       # 应显示 CNAME → ...

类型跟预期不一致就修。

第 6 步:等传播后再验证

改后 15-30 分钟。多 resolver dig。所有都显示新值后浏览器刷新。

预防建议

  • 信你主机提供商的文档,不要信通用教程。
  • 每个 name 选了什么类型,在 DNS 提供商笔记里记下。
  • apex 域名永远用 A 或 ALIAS/ANAME,永远不用 CNAME。
  • 同名不要混类型;选一个删冲突。
  • 换主机时彻底删旧记录再加新的。

相关阅读

标签: #排查 #DNS #排查