DNS 解析:A 记录和 CNAME

域名怎么指向 VPS?小够讲清 DNS 解析:A 记录和 CNAME 的区别、什么时候用哪个,以及解析不生效时的排查流程。

我是小够。买了 VPS、注册了域名,中间还差一步:DNS 解析。不做这步,域名和服务器就是两张皮。今天把 A 记录和 CNAME 讲明白,建站第一步就卡在这儿的人很多。

DNS 是什么:互联网的电话本

你输入 example.com,浏览器不知道这是哪台机器,得先问 DNS:这个域名对应的 IP 是多少?DNS 返回 IP,浏览器再去连。整个过程几十毫秒,你无感知,但每一步都不能错。

A 记录:域名直接指向 IP

A 记录就是把域名指向一个 IPv4 地址:

@    A    1.2.3.4
www  A    1.2.3.4

@ 代表根域名(example.com 本身),www 是子域名。两条都加上,用户输带 www 和不带 www 都能打开。这是 VPS 建站最常用的解析,加完等生效就行。

AAAA 记录是 A 记录的 IPv6 版,指向 IPv6 地址。商家给了 IPv6 就加上,没有也不影响。

CNAME:别名,指向另一个域名

CNAME 是把一个域名指向另一个域名:

blog  CNAME  example.github.io

访问 blog.example.com 时,DNS 先解析到 example.github.io,再解析它的 IP。适合目标 IP 会变的场景:CDN、第三方服务(比如博客托管、邮件服务),对方换 IP 了你不用动。

铁律:根域名别用 CNAME。@ 上挂 CNAME,会和邮箱的 MX 记录冲突,邮件收不到。这是 DNS 协议的规定,不是哪家注册商的限制。根域名老老实实 A 记录,子域名再用 CNAME。

A 还是 CNAME:决策表

场景用哪个
域名指向自己的 VPSA 记录
www 和根域名都指向 VPS两条 A 记录
子域名指向 CDN / 第三方服务CNAME
换服务器改 A 记录的 IP,一处搞定
邮箱MX 记录,别和 CNAME 冲突

实操:域名指向 VPS

  1. 去域名注册商的 DNS 管理页(或 Cloudflare 这类 DNS 托管)。
  2. 加 A 记录:主机记录填 @,记录值填 VPS 的 IP。
  3. 加 A 记录:主机记录填 www,记录值填同一个 IP。
  4. 等生效,一般几分钟到几小时。

TTL:生效快慢的旋钮

每条解析有个 TTL(存活时间),意思是 DNS 服务器缓存这条记录多久。TTL 86400(24 小时),改了 IP 要等一天才全球生效;TTL 300(5 分钟),5 分钟就生效。

技巧:换服务器前,先把 TTL 改小(比如 300),等原来的 TTL 过期,再改 IP,切换几乎无缝。换完稳定了,再把 TTL 改回去,省 DNS 查询量。平时别用太小的 TTL,徒增解析负担。

解析不生效:排查流程

加了 A 记录,浏览器还是打不开,按这个顺序查:

  1. ping 域名:看返回的 IP 对不对。IP 不对,说明解析没生效或加错了。
  2. 查 TTL:刚改的,等 TTL 过期。心急吃不了热豆腐。
  3. 清本地缓存:电脑和路由器的 DNS 缓存可能还记着旧的,换个网络(手机流量)试试。
  4. 在线工具查:用 DNS 查询工具看全球各地的解析结果,定位是局部问题还是全局问题。
  5. 查服务器:解析对了还打不开,看防火墙 80/443 放行了没,网站服务跑起来没。一层层来。
nslookup example.com
dig example.com +short

这两个命令,一个看解析结果,一个看得更细。Windows 用 nslookup,Linux/macOS 两个都有。

常见坑

  • 解析加了,网站还是旧的:CDN 缓存、浏览器缓存,先清缓存再怀疑人生。
  • CNAME 和 A 混用:同一个主机记录,又加 A 又加 CNAME,冲突,删掉一个。
  • @ 和 www 只加了一个:用户输另一个打不开,两个都加上,强迫症友好。
  • 域名没实名 / 没备案想解析到国内:.cn 域名要实名才能解析,国内主机要备案。这是政策,不是技术问题,流程走完再来。

其他常见记录:MX、TXT、NS

A 和 CNAME 是建站最常用的,但还有几个会碰到:

  • MX 记录:指定收邮件的服务器。想用域名邮箱(比如 [email protected]),就得加 MX。注意前面说的:挂了 MX 的域名,根域名别用 CNAME。
  • TXT 记录:存文本,干两件事:一是域名所有权验证(申请 SSL、接第三方服务时让你加一条 TXT 证明你是主人),二是 SPF/DKIM/DMARC,防邮件被当垃圾邮件。
  • NS 记录:指定哪家管你的 DNS。你在注册商那儿把 NS 改成 Cloudflare,DNS 就归 Cloudflare 管了。
  • SRV 记录:少见,某些服务(比如 Minecraft 服务器、SIP 电话)用,指定主机加端口。

建站初期,A 记录打天下;等你要接邮箱、接 CDN、做验证,TXT 和 MX 自然会找上你。

DNS 托管:要不要用 Cloudflare

域名注册商自带的 DNS 能用,但很多人会把 DNS 托管到 Cloudflare 这类专业服务。好处:解析生效快、免费 CDN、DNSSEC 防劫持、API 方便自动化。坏处:多一个依赖,Cloudflare 挂了你的解析也挂(概率极低)。

小够的建议:个人建站,直接上 Cloudflare 免费版,改两条 NS 记录的事,收益明显。注意 DNS 托管和 CDN 是两回事,Cloudflare 上那个「小云朵」点亮了才是走 CDN,只托管 DNS 的话保持灰色。

子域名规划:提前想好

站多了,子域名乱起名,以后自己都找不到。提前定个规范:

  • www:主站
  • blog:博客
  • api:接口
  • cdn / static:静态资源
  • monitor:监控面板
  • test / dev:测试环境

测试用的子域名,搜索引擎抓到了尴尬?robots 屏蔽或者加访问密码,别裸奔。规划一次,受用几年。

DNS 劫持:一句话科普

有时候解析明明对了,打开却是别人的广告页,这可能是 DNS 劫持:中间有人篡改了 DNS 返回结果。表现:偶发、特定网络下出现、HTTP 站点中招多。应对:换可靠的 DNS(比如 114.114.114.114、阿里 223.5.5.5)、上 HTTPS(劫持者拿不到证书,浏览器会报警)、用 DNSSEC。知道有这回事,遇到时不懵就行。

DNS 生效时间线:别催

从你点保存到全球生效,中间有好几站:注册商 → 顶级 DNS → 各地运营商 DNS → 你的设备,每站都有缓存。TTL 300 的情况下,一般几分钟到半小时;TTL 大的,等一天也正常。

催也没用,这是协议规定的。但你可以:改之前先把 TTL 调小(前面说的技巧)、用在线工具看全球生效进度、换个网络测试(手机流量和宽带走的不是同一个 DNS)。三板斧下来,基本能判断是「还没生效」还是「配错了」。

小够的唠叨

DNS 是建站的基本功,不难,但细节多。记住三句话:指向自己用 A,指向别人用 CNAME,根域名别碰 CNAME。解析这关过了,后面 SSL、建站都是一马平川。遇到问题别慌,按排查流程一层层走,90% 的「解析不生效」都是 TTL 和缓存的锅。