域名(Domain Name)是互联网上的”门牌号”,DNS(Domain Name System)是把域名翻译成 IP 地址的系统。理解域名和 DNS 是自托管的第一步。
根域名、子域名、顶级域名
一个域名是分层级的,从右往左读:
blog . example . com
↑ ↑ ↑
子域名 二级域名 顶级域名(TLD)
(主域名)
| 概念 | 说明 | 例子 |
|---|---|---|
| 顶级域名(TLD) | 最右边的部分 | .com、.org、.cn、.net、.dev、.io |
| 根域名(主域名/裸域名) | 你注册购买的那个域名 | example.com、linqin.xyz |
| 子域名 | 加在根域名前面的前缀 | blog.example.com、memos.linqin.xyz |
| www | 一个历史遗留的特殊子域名,不是必须的 | www.example.com 只是个子域名,和 blog.example.com 地位一样 |
买域名买的是什么?
你买的是二级域名 + 顶级域名这部分(如
example.com),这是需要每年付费的。子域名(blog、memos、www、garden…)是你自己随便加的,免费且数量不限。一个域名可以挂无限多个服务。
DNS 解析:域名 → IP 地址
浏览器输入 blog.example.com 后发生了什么:
你的浏览器
│
│ 1. 问本地缓存:blog.example.com 的 IP 是多少?
│ (浏览器缓存 → 系统缓存 → 路由器缓存)
│
│ 2. 缓存没有,问 DNS 递归服务器(通常是运营商或 8.8.8.8)
▼
DNS 递归服务器
│
│ 3. 问根域名服务器:.com 是谁管的?
│ 根服务器返回 .com 顶级域名服务器地址
│
│ 4. 问 .com 顶级服务器:example.com 是谁管的?
│ 返回 example.com 的权威 DNS 服务器(你在 Cloudflare/阿里云配置的那个)
│
│ 5. 问权威服务器:blog.example.com 指向哪?
│ 返回具体 IP 地址,比如 192.0.2.1
▼
浏览器拿到 IP,直接和 192.0.2.1 建立连接
整个过程通常在几十毫秒内完成,结果会被缓存一段时间(TTL)。
常见 DNS 记录类型
在域名服务商(Cloudflare、阿里云、腾讯云等)的控制台里,你会添加这些记录:
| 记录类型 | 作用 | 例子 |
|---|---|---|
| A 记录 | 域名 → IPv4 地址 | blog → 192.0.2.1 |
| AAAA 记录 | 域名 → IPv6 地址 | blog → 2001:db8::1 |
| CNAME 记录 | 域名 → 另一个域名(别名) | garden → xxx.pages.dev |
| MX 记录 | 邮件服务器地址 | @ → mx1.qq.com(收邮件用) |
| TXT 记录 | 任意文本,用于验证 | 给 SSL 签发、SPF 反垃圾邮件用 |
| NS 记录 | 指定这个域名由哪个 DNS 服务器管 | 一般不用改,域名注册商默认设置 |
@ 在 DNS 配置里代表根域名本身。比如给 @ 加 A 记录,就是给 example.com(不带 www)加解析。
实际配置例子
假设你买了域名 linqin.xyz,部署了这些服务:
| 你想访问的地址 | 服务跑在哪 | 应该加什么记录 |
|---|---|---|
linqin.xyz | 博客,Cloudflare Pages | CNAME: @ → xxx.pages.dev |
blog.linqin.xyz | 博客(也行) | 同上,用哪个都行 |
garden.linqin.xyz | 数字花园,Cloudflare Pages | CNAME: garden → xxx.pages.dev |
memos.linqin.xyz | 家里服务器上的 Memos(IP 1.2.3.4) | A: memos → 1.2.3.4 |
pan.linqin.xyz | 家里 NAS(和 Memos 同一台服务器) | A: pan → 1.2.3.4 |
为什么同一 IP 可以跑多个服务?
一台服务器(一个公网 IP)上可以跑几十个服务,用反向代理根据域名区分。详见 02-反向代理。
CNAME vs A 记录怎么选
| 场景 | 推荐 |
|---|---|
服务有自己的域名(Cloudflare Pages、Vercel、GitHub Pages 给你的 xxx.pages.dev) | CNAME,让服务商自己管理 IP 变更 |
| 服务在你自己的服务器上,你知道公网 IP | A 记录 |
根域名(example.com 不带前缀) | CNAME 有局限(根域名 CNAME 会影响 MX 等其他记录),用 CNAME 扁平化(Cloudflare 支持)或 A 记录 |
DNS 传播(Propagation)
修改 DNS 记录后,不是全世界立刻生效的。因为各级 DNS 服务器都有缓存,缓存过期时间由 TTL(Time To Live,单位秒)决定。
TTL=60 → 1分钟后全球基本生效
TTL=3600 → 约1小时
TTL=86400 → 约24小时(这是很多服务商的默认值)
- 修改记录前,可以把 TTL 临时调小(如 60 秒),等生效快
- 生效后再调回大值(3600),减少 DNS 查询压力
- 查询全球各地是否生效可以用 whatsmydns.net 这样的工具
Cloudflare 代理(橙色云朵)
如果你用 Cloudflare 管理 DNS,每条记录旁边有个云朵图标:
| 状态 | 含义 | 访问者看到的 IP | 流量经过 Cloudflare 吗 |
|---|---|---|---|
| 🟠 橙色云朵(已代理) | 开启 CDN/代理 | Cloudflare 的 IP | ✅ 经过,能隐藏真实 IP、享防护、免费 HTTPS |
| ⚪ 灰色云朵(仅 DNS) | 只做 DNS 解析 | 你真实的服务器 IP | ❌ 直接连到你的服务器 |
建议:
- 网站、博客等公开服务 → 开橙色云(隐藏源站 IP,防 DDoS,免费 SSL)
- 家里的服务(SSH、VPN、远程桌面等不支持反代的)→ 灰色云朵(TCP 直连,Cloudflare 默认不代理非 HTTP 流量)
- 某些需要真实 IP 的应用(如某些游戏、点对点应用)→ 灰色云朵
常见问题
Q: 为什么我 ping 子域名和根域名 IP 不一样? 正常。根域名可能走 CDN(多个 IP),子域名可能直接指向你的服务器,或者走不同的 CDN 节点。
Q: DNS 改了很久还是访问旧地址?
- 你本地电脑有缓存:Windows 执行
ipconfig /flushdns,或者换个浏览器/用隐私窗口试试 - 路由器/运营商有缓存:等 TTL 过期,或者手动把 DNS 改成
8.8.8.8(Google)或223.5.5.5(阿里)测试
Q: 一个子域名能同时指向多个 IP 吗? 可以。A 记录可以配多条,这就是DNS 轮询,做简单的负载均衡。但它不知道后端是否存活,不像真正的负载均衡器会健康检查。
下一步:02-反向代理
相关:03-端口与HTTPS | 返回目录