给博客、文档站、接口域名或 GitHub Pages 绑自定义域名时,最容易卡住的不是页面本身,而是 DNS 记录怎么填。
后台里会看到 A、AAAA、CNAME、NS、TXT、MX、TTL 这些词。它们不难,但如果一开始混在一起看,就很容易出现“解析填了,但打不开”“换了 IP,半天不生效”“根域和 www 不知道怎么配”的问题。
这篇只抓日常最常遇到的几类记录,尤其是 A 记录和 CNAME。
域名层级先看清楚
一个域名可以拆成多层:
www.example.com.
│ │ │ └── 根域,日常省略不写
│ │ └────── 顶级域,比如 com / cn / net
│ └────────────── 二级域,比如 example
└────────────────── 子域,比如 www
日常说“买了一个域名”,通常买的是 example.com 这样的二级域。www.example.com、blog.example.com、api.example.com 都是它下面的子域。
DNS 解析的工作,就是把这些域名转换成 IP 地址,或者把一个名字指向另一个名字。
常见 DNS 记录分别做什么
可以先记这几类:
| 记录 | 用途 |
|——|——|
| A | 域名指向 IPv4 地址 |
| AAAA | 域名指向 IPv6 地址 |
| CNAME | 域名指向另一个域名 |
| NS | 指定这个域名由哪组 DNS 服务器负责解析 |
| MX | 指定邮件服务器 |
| TXT | 放一段文本,常用于站长验证、SPF、DKIM 等 |
| SRV | 服务定位,比如某个协议服务跑在哪台机器和端口 |
| PTR | IP 反查域名 |
个人站点最常碰到的是 A、CNAME、TXT 和 NS。
比如:
- 服务器固定 IP:常用
A记录。 - 子域名指向某个平台给的域名:常用
CNAME。 - 搜索引擎、邮箱、平台验证:常用
TXT。 - 想把解析托管到 Cloudflare 或 DNSPod:改
NS。
A 记录适合直接绑定 IP
A 记录就是:
域名 -> IPv4 地址
比如你有一台 VPS,公网 IP 是某个固定地址,就可以把主域名或子域名直接解析到这台机器。
它的优点是直观:查到域名就能拿到 IP。
缺点是如果服务器 IP 变了,每条指向旧 IP 的 A 记录都要改。记录少时没问题,子域名一多,就容易漏。
所以 A 记录适合这些场景:
- 自己有固定公网 IP。
- 解析目标就是一台服务器或一个负载均衡 IP。
- 希望根域名
example.com直接指到某个 IP。
CNAME 适合指向另一个域名
CNAME 是别名记录:
域名 -> 另一个域名 -> 最终再解析到 IP
例如:
www.example.com -> your-name.github.io
浏览器访问 www.example.com 时,DNS 会先知道它是另一个域名的别名,再继续解析后者。
它的好处是维护成本低。平台后面换 IP,你不用跟着改,只要平台提供的目标域名不变即可。
所以 CNAME 适合这些场景:
- 子域名接入 GitHub Pages、Netlify、Vercel、对象存储、CDN 等平台。
- 多个子域想跟随同一个平台域名。
- 目标 IP 由第三方平台维护,你不想关心它背后的 IP 变化。
注意一个常见限制:同一个主机记录下,CNAME 通常不能和其他记录并存。也就是说,一个名字如果已经是 CNAME,就不要再给它同时配 A、MX、TXT 之类的记录。
A 记录和 CNAME 怎么选
可以按这个思路判断:
| 场景 | 建议 |
|——|——|
| 目标是固定 IP | 用 A 记录 |
| 目标是第三方平台给你的域名 | 用 CNAME |
| 根域名要指向服务器 | 常用 A 记录 |
| www 子域名指向博客托管平台 | 常用 CNAME |
| 平台明确要求某种记录 | 按平台文档来 |
一个常见组合是:
example.com A 指向自己的服务器或平台要求的 IP
www.example.com CNAME 指向平台提供的域名
也可以反过来让 www 做主入口,再把根域名跳转到 www。关键不是哪种绝对更好,而是入口要统一,避免一个站点同时散落多个 canonical 地址。
TTL 决定变更多久生效
TTL 是 DNS 缓存时间,单位通常是秒。
如果 TTL 是 3600,意思是递归 DNS 或客户端可以把这条解析缓存大约 1 小时。你改完记录后,不一定全网马上看到新结果,要等旧缓存过期。
所以迁移域名或切 IP 前,常见做法是:
- 提前把 TTL 调小,比如从 3600 调到 300。
- 等旧 TTL 周期过完。
- 再切换目标 IP 或 CNAME。
- 确认稳定后再把 TTL 调回更稳的值。
TTL 不是越小越好。太小会增加 DNS 查询次数,也可能让解析更依赖上游稳定性。日常站点用 300、600、3600 都很常见,按变更频率和平台建议来即可。
NS 是把解析权交给谁
NS 记录表示这个域名由哪组 DNS 服务器负责解析。
买域名时,注册商通常会给你一组默认 NS。你也可以把 NS 改到 Cloudflare、DNSPod、阿里云 DNS 等平台。
改 NS 的意义是把解析管理入口换到另一个平台。例如:
- 想用 Cloudflare 的 CDN、安全防护和可视化 DNS。
- 想用 DNSPod 的国内线路解析。
- 想把域名注册商和解析服务分开管理。
需要注意:改 NS 是比较上层的切换。切过去以后,真正生效的 DNS 记录要在新的 DNS 平台里维护。很多“我明明在注册商里改了 A 记录却不生效”的问题,本质是 NS 已经指向别的平台了。
GitHub Pages 自定义域名怎么理解
GitHub Pages 绑定自定义域名时,经常会出现两种方式:
- 根域名用 A 记录指向 GitHub Pages 公布的 IP。
www子域用 CNAME 指向<user>.github.io。
同时,仓库里通常还要有一个 CNAME 文件,内容写你的自定义域名。它的作用是告诉 GitHub:这个 Host 应该路由到哪个 Pages 站点。
这里不要死记某几个 IP,因为平台文档可能更新。真正稳的做法是:配置时打开 GitHub Pages 官方文档,看当前推荐的 A 记录 IP 和 CNAME 写法。
排查时先按这几步走
域名打不开时,不要一上来重装服务。先按 DNS 这条线排:
- 看当前域名 NS 指向哪里,确认自己在哪个平台改记录才算数。
- 看主机记录有没有填错,比如根域名通常是
@,www是子域。 - 看记录类型是否符合目标平台要求,别把该写 CNAME 的地方写成 A。
- 看 TTL 是否还没过期,旧解析可能还在缓存。
- 用
dig、nslookup或在线 DNS 工具查实际返回值。 - DNS 已经对了,再看 Web 服务、HTTPS 证书和平台绑定状态。
这样排查会比来回改记录更稳。
小结
DNS 记录可以先记成几句话:
A记录:域名直接指向 IPv4。AAAA:域名直接指向 IPv6。CNAME:域名指向另一个域名。TXT:放验证文本或邮件安全配置。NS:决定这个域名由哪组 DNS 服务器负责。TTL:决定缓存多久,影响变更生效速度。
实际配置时,先看目标是 IP 还是平台域名,再决定 A 记录或 CNAME。再确认 NS 和 TTL,很多域名问题就已经排掉一半了。




