域名与 DNS 如何工作:非开发者指南
域名是人们输入以访问你网站的名字,比如 example.com;而 DNS(域名系统)是互联网的“通讯录”,它把这个名字翻译成你的网站实际所在的位置。你从域名注册商那里租用域名,然后添加 DNS 记录,告诉互联网“网站在那边”以及“邮件发到这边”。把自定义域名连接到应用,主要就是在正确的位置添加正确的记录,然后等待其生效。
用 AI 构建时为什么重要
AI 应用生成器可以编写并托管你的应用,但你的域名在它之外——通常由另一家公司管理,位于一个充满陌生记录类型的控制面板里。很多次上线都卡在这里:应用已经准备好了,但域名显示错误,或者在修改 DNS 之后邮件莫名其妙地不能用了。
只要稍微了解一点,就能帮上大忙。你会知道你的主机要求的是哪条记录,为什么它还没生效,以及如何避免破坏那些已经依赖你域名的东西(比如邮件)。
一个日常比喻
想象你手机里的通讯录。
你并不记得朋友的号码;你点一下他的名字,手机就会查找号码。DNS 对互联网做的也是同样的事:你输入 example.com,DNS 就查找要连接的服务器的“号码”(IP 地址)。
- 域名就是联系人的名字。
- 注册商是正式登记该名字归你所有的公司。
- DNS 记录是保存在这个名字下面的详细信息:电话号码、电子邮箱、家庭住址。
- 域名服务器是哪一本通讯录是这个名字的官方版本。
- 缓存就是你的手机会把号码记住一段时间。如果你的朋友换了号码,有些手机会一直拨打旧号码,直到保存的副本被刷新——这就是 DNS“传播”的含义。
域名的组成部分
以 app.example.com 为例:
| 部分 | 名称 | 说明 |
|---|---|---|
.com | 顶级域名(TLD) | 由注册管理机构运营。其他的还有 .org、.io、.ai,以及 .uk 等国家代码 |
example | 二级域名 | 你注册的那部分 |
example.com | 根域名或“顶点”域名 | 你拥有的部分 |
app | 子域名 | 你可以在 DNS 中自由创建——www、app、shop |
你并不是一次性买下域名,而是注册一段时间(通常为一年或更久)并续费。如果让它过期,别人就可以注册它。
DNS 查询如何工作
当有人输入 app.example.com 时:
- 浏览器向一个 DNS 解析器(通常由其互联网服务商或公共服务运营)请求地址。
- 如果解析器里有新鲜的缓存答案,它会立即回复。
- 如果没有,它会沿着层级逐级查询:根服务器指向
.com服务器,.com服务器再指向你域名的域名服务器。 - 你的域名服务器返回你设置的记录,比如指向你主机的 CNAME,或带有 IP 地址的 A 记录。
- 解析器按照记录的 TTL(生存时间)缓存该答案,并把它交给浏览器,浏览器随即连接到服务器。
整个过程通常在毫秒内完成。
你真正会用到的 DNS 记录类型
| 记录 | 作用 | 示例 |
|---|---|---|
| A | 把一个名字指向 IPv4 地址 | example.com → 203.0.113.10 |
| AAAA | 把一个名字指向 IPv6 地址 | example.com → 2001:db8::10 |
| CNAME | 把一个名字设为另一个主机名的别名 | app.example.com → myapp.host.com |
| MX | 指定接收该域名邮件的服务器,并带有优先级数字 | example.com → 10 mail.provider.com |
| TXT | 存放文本,用于验证和邮件安全 | v=spf1 include:_spf.provider.com ~all |
| NS | 列出该域名的权威域名服务器 | ns1.dnsprovider.com |
| CAA | 限制哪些证书颁发机构可以签发 HTTPS 证书 | 0 issue "letsencrypt.org" |
有几条规则值得了解:
- CNAME 不能与其他记录共用同一个名字。 这就是为什么标准的 CNAME 不能设在根域名上,因为根域名总是有 NS 和其他记录。许多 DNS 服务商提供名为 ALIAS、ANAME 或 CNAME 扁平化的变通方案。
- TXT 记录承担了很多邮件相关的工作。 SPF 列出可以代表你的域名发送邮件的服务器;DKIM 发布用于验证签名的公钥;DMARC 告诉接收方如何处理未通过这些检查的邮件。
- MX 数字越小,优先级越高。 邮件会先尝试数字最小的服务器。
传播与 TTL
“传播”这个说法听起来像是变化在互联网上慢慢扩散。实际上发生的是缓存:解析器会按照 TTL 保存每个答案的副本,只有在它过期后才会重新查询。因此:
- 一条从未被查询过的新记录,通常几分钟内就能生效。
- 修改已有记录时,需要等待其旧 TTL 过期,才能在各处都看到变化。
- 修改域名服务器可能需要一两天,因为这些记录在顶级域层面的缓存时间更长。
一个有用的技巧:在计划好的变更之前,先把记录的 TTL 调低(比如调到几分钟),等待旧 TTL 过期,然后再进行修改。
实例:把预约应用连接到你的域名
你拥有 yoursalon.com。你现有的网站和 Google Workspace 邮箱都在用它。你做了一个预约应用,希望它位于 book.yoursalon.com。
- 找到你的 DNS 在哪里管理。 可能是你的注册商,也可能是单独的 DNS 服务商。你的 NS 记录会告诉你。
- 添加一条 CNAME,名字为
book,指向你的应用主机提供的目标地址。 - 添加主机要求的任何 TXT 记录,用来证明域名归属(如果主机要求的话)。
- 不要动 MX 和邮件相关的 TXT 记录。 因为你没有改动它们,邮件会继续正常工作。
- 在主机后台验证,等 DNS 更新之后进行。主机随后会为
book.yoursalon.com签发 HTTPS 证书。 - 测试:用手机的移动数据网络访问,因为它使用的解析器和缓存与你家里的 Wi-Fi 不同。
如果你想把应用放到根域名 yoursalon.com 上,你需要 A 记录或你的 DNS 服务商的 ALIAS/扁平化功能——而且那样会替换掉你在那里的现有网站。更多步骤请参阅如何连接自定义域名。
常见错误与误解
- “域名和托管是同一回事。” 域名是名字;托管是应用运行的地方。DNS 把两者连接起来。
- 主机要求 CNAME 却用了 A 记录(或者反过来)。请严格按照主机的指示操作。
- 目标地址拼写错误。 CNAME 目标中的一个错字就会导致验证失败。
- 更换域名服务器时没有复制记录。 把 DNS 迁移到新服务商却没有重建 MX 和 TXT 记录,是导致邮件中断的典型原因。
- 不该开启代理时开启了代理。 有些 DNS 服务商(比如 Cloudflare)可以代理流量。有些主机要求把记录设置为“仅 DNS”,以便它们能签发证书。
- 删除“不认识”的 TXT 记录。 它们通常是某些服务依赖的验证记录或邮件安全记录。
- 任由域名过期。 开启自动续费,并保持支付卡有效。
向你的 AI 构建工具提出什么要求
DNS 位于你的代码之外,所以这里更多是关于应该问什么:
- “app.mydomain.com 需要哪一条确切的 DNS 记录?类型、名称和值分别是什么?”
- “这次修改会影响我的邮件吗?”
- “添加记录后域名显示错误,我应该检查什么?”
- “请设置正确的规范 URL 和重定向,让 www 和非 www 不会同时显示网站。”
- “设置从我的域名发送邮件——我需要哪些 SPF、DKIM 和 DMARC 记录?”参见如何从你的应用发送邮件。
Mythex 上的自定义域名
每个已发布的 Mythex 应用都会获得一个 yourname.mythex.app 地址。在 Pro 版本中,你可以改用自己的域名:可以在 Mythex 内购买域名(注册费用单独计费,购买的域名的 DNS 由我们为你管理),也可以连接你已拥有的域名:添加一条 CNAME,从 app.example.com 这样的子域名指向你应用的 yourname.mythex.app 地址,然后点击验证。HTTPS 会自动签发。如果你的 DNS 在 Cloudflare 上,请把该记录设置为“仅 DNS”。建议使用子域名;根域名取决于你的 DNS 服务商是否支持 ALIAS 或扁平化。自定义域名文档逐步介绍了每个步骤,定价页面则说明了 Pro 包含的内容。
常见问题
简单来说,DNS 是什么?
DNS(域名系统)是互联网的“通讯录”。它把人们容易记住的名字(比如 example.com)翻译成计算机需要的信息——通常是 IP 地址——这样浏览器才能找到正确的服务器。
A 记录和 CNAME 有什么区别?
A 记录把一个名字直接指向一个 IPv4 地址。CNAME 则把一个名字指向另一个主机名,然后从那里继续查询。当你的主机 IP 地址可能变化时,CNAME 很方便,但标准的 CNAME 不能用在根域名本身上。
DNS 生效需要多长时间?
通常几分钟,有时要几小时。变更会随着旧记录的缓存副本过期而逐步显现,这取决于记录的 TTL。更换域名服务器可能需要一两天,因为这些记录的缓存时间更长。
修改网站的 DNS 会导致邮件出问题吗?
只有在你修改或删除了邮件所依赖的记录时才会——也就是 MX 记录以及 SPF、DKIM、DMARC 等 TXT 记录。为 www 或 app 添加一条 CNAME 不会影响邮件。如果你在没有先复制这些记录的情况下把域名迁移到新的域名服务器,邮件就可能中断。
为什么要用 www 或 app 而不是根域名?
像 www.example.com 或 app.example.com 这样的子域名可以使用 CNAME,许多托管平台都要求这样做。根域名(example.com)不能设置标准的 CNAME,所以需要用 A 记录,或者使用服务商特有的 ALIAS、ANAME 或 CNAME 扁平化功能。