你已经有了域名,也有了带 IP 地址的服务器(或托管平台)。DNS 就是那一小组记录,让"输入名称、访问 IP"真正运转起来。三种记录类型几乎能搞定一切;把它们弄懂一次,就是"就是不通"与"我知道哪里出了问题"之间的分水岭。
DNS 之所以像个黑盒,是因为它运转正常时完全无感知:你输入 URL,页面就加载了。配置改动后的第二天再输同一个 URL,有时能加载,有时不行,而差别只在于你的电脑碰巧问到了哪个城市的哪台服务器。这一切都不直觉。缺的那个心智模型——也是唯一重要的那个——就是 DNS 究竟做了什么。
DNS 是一张全球分布的查询表。名称进去,答案出来。你的域名——比如 mybrand.com——有一条记录说"有人查我,就把他路由到 IP X"。子域名(www.mybrand.com、api.mybrand.com)可以有各自的记录,指向不同的目的地。存放这些答案的记录分为几种类型,你在域名注册商(或者你委托管理 DNS 的地方)写入它们,然后等待全球 DNS 缓存追上来——这就是"传播",也是让整个系统感觉很慢的那个环节。
本教程涵盖处理 95% 真实域名场景的三种记录类型、如何第一次就配置正确,以及在你花一小时排查一个根本没问题的应用之前,用来验证 DNS 是否真的生效的三种检验方法。
mybrand.com)和子域名打开 DNS 管理面板之前,先确认你的目标地址长什么样:
198.51.100.42——VPS 常见(DigitalOcean Droplet、Hetzner 服务器等)。使用 A 记录。2001:db8::1——越来越普遍,部分主机仅支持 IPv6。使用 AAAA 记录。my-app.vercel.app——PaaS 平台给你的地址。使用 CNAME 记录。规则很简单:数字地址用 A(或 AAAA);名称用 CNAME。混淆两者是排行第一的配置错误。
mybrand.com在你的 DNS 提供商(注册商面板,或你委托 DNS 管理的地方):
@(或留空,代表根域名),值填服务器 IP,TTL 填 3600(一小时)即可。@ 添加 CNAME 就能用。这条记录让输入 mybrand.com 能访问到你的网站。
mybrand.com 和 www.mybrand.com 都能访问为 www 添加一条记录:
www,值填 mybrand.com。这样 www 会跟随根域名。www,目标与根域名相同。选定一种规范形式("我们希望所有人访问 mybrand.com"),然后让主机把另一个重定向过去。Magic Deploy 和大多数现代主机会自动处理这一步。
TTL 是以秒为单位的时长,决定全球各地的 DNS 服务器在重新查询之前可以缓存你的记录多久。默认值(通常是 3600,即一小时)对稳定运行的域名来说够用了。两条实用规则:
对于无关紧要的域名,保持默认值,不用费心思。
你发布一条新 DNS 记录后,权威服务器(你的注册商 / DNS 提供商)会立即持有它。但全球的每一台 DNS 解析器——你的 ISP 解析器、公共解析器(如 8.8.8.8 和 1.1.1.1)、你笔记本上的本地缓存——都在持有某个带 TTL 的缓存答案。在 TTL 过期之前,这些解析器会愉快地返回缓存中(往往是旧的)答案,而不会重新查询。
"传播"就是等待所有这些缓存过期的过程。实际上:
在怀疑应用有问题之前,先验证 DNS 本身:
# 1. What does your local resolver see right now?
dig mybrand.com +short
# Expected: your IP. If empty or wrong, the record isn't published or hasn't propagated.
# 2. What does a different resolver see?
dig @1.1.1.1 mybrand.com +short
# Asks Cloudflare's public resolver (1.1.1.1) instead of your local one.
# Different resolver = different cache state. If this agrees with #1,
# both resolvers updated. If it differs, your local cache is just stale —
# that's a wait, not a bug. For the truest view (no caches anywhere):
# dig +trace mybrand.com
# walks from the root nameservers down, asking each fresh. Slowest, most honest.
# 3. Are you actually reaching the server?
curl -I https://mybrand.com
# Expected: an HTTP response. If you get connection refused or timeout,
# the IP is wrong, the server isn't listening, or the firewall is blocking.
判断逻辑:如果 #1 和 #2 结果不同,传播还在进行中——等一等。如果 #2 结果不对,是你 DNS 提供商那边的记录有误——修正记录。如果两者都对但 #3 失败,DNS 没有问题;问题出在服务器端。
DNS 配置好之后,http://mybrand.com 就能访问到你的服务器了。但 https://mybrand.com 还不行,需要先配置 TLS 证书。这是单独的一步,通常由以下方式处理:
sudo certbot --nginx -d mybrand.com -d www.mybrand.com --redirect。--redirect 参数会在 nginx 配置中将 HTTP 重写为 HTTPS;certbot 还会安装一个定时任务,每 90 天自动续期。公开站点绝对不要在没有 HTTPS 的情况下运行。现代浏览器会大声警告;所有人都把它当作标配;而成本为零。TLS 证书是 DNS 之后的第二层,两者合在一起才能让网站安全地被访问到。
以下这些记录对于纯粹托管网站来说不是必须的,但你迟早会碰到:
[email protected] 真的能收到邮件,需要把 MX 记录指向你的邮件主机(Fastmail、Google Workspace、Proton 等)。主机会给你具体的值——名称、优先级、目标——你直接粘贴进去。MX 与 A/CNAME 相互独立,在某个域名上能收邮件并不影响网站的位置。经验法则:A/AAAA/CNAME 路由流量;MX 路由邮件;TXT 证明所有权。知道某个问题属于哪种记录类型,就是解决了一半的排查工作。
example.com.),某些不带。在 DNS 领域两者含义相同。在不同提供商之间复制粘贴 CNAME 目标时,那个点可能需要,也可能不需要——如果 CNAME 看起来正确却无法解析,查一下该提供商的文档。