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:决策表
| 场景 | 用哪个 |
|---|---|
| 域名指向自己的 VPS | A 记录 |
| www 和根域名都指向 VPS | 两条 A 记录 |
| 子域名指向 CDN / 第三方服务 | CNAME |
| 换服务器 | 改 A 记录的 IP,一处搞定 |
| 邮箱 | MX 记录,别和 CNAME 冲突 |
实操:域名指向 VPS
- 去域名注册商的 DNS 管理页(或 Cloudflare 这类 DNS 托管)。
- 加 A 记录:主机记录填
@,记录值填 VPS 的 IP。 - 加 A 记录:主机记录填
www,记录值填同一个 IP。 - 等生效,一般几分钟到几小时。
TTL:生效快慢的旋钮
每条解析有个 TTL(存活时间),意思是 DNS 服务器缓存这条记录多久。TTL 86400(24 小时),改了 IP 要等一天才全球生效;TTL 300(5 分钟),5 分钟就生效。
技巧:换服务器前,先把 TTL 改小(比如 300),等原来的 TTL 过期,再改 IP,切换几乎无缝。换完稳定了,再把 TTL 改回去,省 DNS 查询量。平时别用太小的 TTL,徒增解析负担。
解析不生效:排查流程
加了 A 记录,浏览器还是打不开,按这个顺序查:
- ping 域名:看返回的 IP 对不对。IP 不对,说明解析没生效或加错了。
- 查 TTL:刚改的,等 TTL 过期。心急吃不了热豆腐。
- 清本地缓存:电脑和路由器的 DNS 缓存可能还记着旧的,换个网络(手机流量)试试。
- 在线工具查:用 DNS 查询工具看全球各地的解析结果,定位是局部问题还是全局问题。
- 查服务器:解析对了还打不开,看防火墙 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 和缓存的锅。