每个 host 给你 DNS 说明的方言都不一样:「加一条 A 记录到 76.76.21.21」或「CNAME 指到 cname.vercel-dns.com」。如果这两句对你像天书,你还没掌握 DNS 的一页模型。本文就是这一页。
问题背景
DNS 把名字(yoursite.com)翻译成地址(93.184.216.34),浏览器才能连接。记录就是执行翻译的条目。独立开发者 99% 时间只会碰 A 和 CNAME。其它(AAAA、MX、TXT、NS)少见。
判断标准
- 在 Vercel / Firebase / Netlify 添加域名提示「verification pending」或「invalid configuration」。
- 配完打开域名提示「无法访问此网站」。
www.yoursite.com能通但yoursite.com不行(或反过来)。dig yoursite.com回错的 IP 或没结果。
快速结论
A 记录把名字指向 IP,CNAME 把名字指向另一个名字。根域名(yoursite.com)用 A。子域名(www.yoursite.com、blog.yoursite.com)用 CNAME。host 让你用哪个就用哪个。
实操步骤
- 确定要指什么。根(
yoursite.com)还是子域名(www.yoursite.com、app.yoursite.com)? - 看 host 的 DNS 说明。给的要么是 IP 地址(用 A 记录),要么是另一个域名(用 CNAME)。
- 登录 DNS 服务商——Cloudflare、注册商自带 DNS、Route 53 等。
- 根域名:加 A 记录,Name
@(或留空,看服务商),Value 填 IP。 www:加 CNAME,Namewww,Value 填给你的主机名(如cname.vercel-dns.com)。- 保存等待。多数服务商 60 秒生效,少数因为缓存更久。
dig yoursite.com(Mac/Linux)或nslookup yoursite.com(任何 OS)验证,结果应该和你设的一致。- 看 host dashboard,应该从「pending」变「active」。
容易踩的坑
- 根域名想用 CNAME——多数服务商不允许。Cloudflare 等少数用「CNAME flattening」模拟,但标准 DNS 不行。
- 同一个 name 同时加 A 和 CNAME——DNS 拒绝这种配置。
- 迁移期 TTL 留 1 天——迁移前先改成 5 分钟,新值传播才快。
- DNS 指了 host 但忘了在 host dashboard 添加域名——DNS 是单向的,host 要主动认领。
- 老记录没删,仍指别处——DNS resolver 可能返回过期值,干净删掉。
- nameserver 已经指向 Cloudflare 还在注册商改 DNS(或反过来)——改的服务器没人查。
这篇适合谁
第一次把域名接 host,或者在 debug 域名不通的独立开发者。
这篇不适合谁
DNS 深度用户——本文是 5 分钟模型,不是深潜。
实战示例
DNS 后台里 A 记录和 CNAME 看起来是这样:
Type Name Value TTL
A @ 76.76.21.21 300
CNAME www cname.vercel-dns.com. 300
保存后怎么验证:
# 检查根域名的 A 记录
dig yoursite.com +short
# 期望: 76.76.21.21
# 检查 www 的 CNAME
dig www.yoursite.com +short
# 期望: cname.vercel-dns.com. + 解析出的 IP
# 绕开本机缓存,直接问公网 resolver
dig @1.1.1.1 yoursite.com +short
如果 dig 返回的还是旧值,多半是本地 resolver 还在缓存——等一下,或者直接问公共 resolver。
FAQ
- 根域名能用 CNAME 吗?: 标准 DNS 不行。Cloudflare 提供「CNAME flattening」模拟。Vercel、Netlify 在支持的服务商上用 ALIAS 或 ANAME。拿不准就用 A。
- ALIAS 或 ANAME 是什么?: 某些 DNS 服务商提供的非标准记录,让 CNAME 行为在根域名上能用。查询时解析成 IP。Cloudflare 的「CNAME flattening」是同一个意思。
- TTL 设多久?: 迁移期 300(5 分钟),稳定后 3600(1 小时)或更高。TTL 越短更新越快,DNS 流量稍多。
- 需要 AAAA 记录吗?: AAAA 是 A 的 IPv6 版。host 给了 IPv6 地址才加,多数情况下不用管。