Wildcard subdomain DNS record configuration for *.domain.com

通配符子域是一种 DNS 配置,使用单个 *.domain.com 记录将您的域名下的所有子域路由到单个服务器 — 无需为每个子域创建单独的 DNS 记录。这种技术广泛用于 SaaS 平台、多租户 Web 应用程序和任何需要动态创建子域的系统。

什么是通配符 DNS 记录?

在 DNS 中,星号(*)是一个通配符,匹配"任何未明确定义的名称"。当您将 *.domain.com 设置为指向 IP 地址时,没有自己特定记录的每个子域都会自动解析为该 IP。

示例:如果您设置 *.example.com → 1.2.3.4,那么 blog.example.com、shop.example.com 和 any123.example.com 都指向同一 IP。

优先级规则:通配符记录的优先级始终低于精确记录。如果您已定义 www.example.com → 5.6.7.8,则对 www 的请求转到 5.6.7.8,而不是通配符 IP。

如何设置通配符 DNS 记录

通过 DirectAdmin DNS 管理

  1. 登录 DirectAdmin → DNS 管理
  2. 点击添加记录
  3. 在名称字段中,输入 *(仅星号)
  4. 选择类型:A(用于 IPv4)或 CNAME
  5. 输入目标 IP 地址或主机名
  6. 点击添加

DNS 记录示例

; 通配符 A 记录
*.example.com. IN A 1.2.3.4

; 通配符 CNAME 记录
*.example.com. IN CNAME server.example.com.

; 精确记录(始终优于通配符)
www.example.com. IN A 5.6.7.8

分步配置通配符 DNS 记录 (*)

以下步骤介绍了从头开始创建通配符记录直到在生产环境中工作的过程。假设您的域名是 example.com,您希望每个子域都指向 IP 203.0.113.10 处的服务器。

  1. 首先检查您的名称服务器:域名必须指向您控制的 DNS 区域(例如 AsiaGB 名称服务器或 DirectAdmin)。如果域名仍然使用您的旧提供商的 DNS,添加此处的记录将无效。
  2. 打开 DNS 区域:进入您的 DNS 管理面板并选择 example.com。
  3. 添加通配符 A 记录:将名称字段设置为 *,类型设置为 A,值设置为 203.0.113.10。大多数 DNS 系统会自动附加 .example.com,形成 *.example.com。
  4. 设置适当的 TTL:在测试期间,使用低 TTL 如 300 秒(5 分钟),以便编辑快速生效。一旦您确信,将其提高到 3600 秒。
  5. 保存并等待传播:保存后,DNS 必须根据之前记录的 TTL 传播 — 通常需要几分钟到几个小时。
  6. 使用 dig 或 nslookup 测试:查询您从未创建过的随机子域。如果它解析为配置的 IP,则通配符工作正常。

示例测试和预期输出:

$ dig +short random123.example.com
203.0.113.10

$ dig +short anything-else.example.com
203.0.113.10

提示:任何没有自己特定记录的名称都回答相同的 IP。如果您需要特定的子域指向其他地方,只需为该名称添加专用 A 记录 — 精确记录始终胜过通配符。

何时使用它(多租户 SaaS、用户子域)

通配符子域在以下情况下很有用:您事先不知道哪些子域名将存在,或者手动创建太多的情况。以下是最常见的真实场景。

多租户 SaaS

为每个客户提供自己工作空间的 SaaS 应用程序通常使用按租户的子域,例如 acme.app.com 和 globex.app.com。当新客户注册时,系统立即为其提供子域,无需触及 DNS — 通配符记录 *.app.com 已经覆盖每个未来的名称。应用程序从 HTTP Host 头读取子域并将请求路由到正确的租户数据。

用户子域和虚荣 URL

允许用户创建自己的页面或个人资料的平台,例如 username.platform.com,依赖通配符,以便每个用户在注册时立即获得个人子域 — 没有管理员需要手动添加 DNS 记录。

自动预览和暂存

为每个分支或拉取请求启动预览环境的 CI/CD 管道,例如 pr-482.preview.com,使用通配符,以便每个部署都获得即时 URL,无需单独的 DNS 记录管理。这让团队可以方便地打开和审查每个版本。

通配符子域的常见用例

用例 示例 原因
SaaS 多租户customer1.app.com每个客户获得自己的子域
静态网站生成器preview-123.deploy.com自动分支预览
开发/暂存feature-x.staging.com每个分支的隔离环境
通配符 SSL*.domain.com + SSL 证书单个证书覆盖所有子域

通配符子域和通配符 SSL 证书

通配符 DNS 记录和通配符 SSL 证书相辅相成。*.domain.com 的通配符 SSL 证书覆盖所有第一级子域,例如 blog.domain.com 和 shop.domain.com,但不覆盖子子域,例如 test.blog.domain.com。

要覆盖子子域,您需要多个证书或多域通配符证书。

一起使用通配符子域和通配符 SSL

在实践中,通配符 DNS 记录和通配符 SSL 证书几乎总是配置成一对。如果您有通配符 DNS 但没有 SSL 覆盖每个子域,用户每次访问新子域时都会收到"您的连接不是私密的"警告。建议的设置顺序是:

  1. 首先设置通配符 DNS 记录 *.example.com 指向您的服务器(根据上面的步骤)。
  2. 为 *.example.com 签发通配符 SSL 证书。这通常需要通过 DNS 验证证明所有权(添加临时 TXT 记录),大多数 CA 要求这样做是因为无法同时对每个子域执行 HTTP 验证。
  3. 在 Web 服务器上安装证书并为从通配符路由的每个虚拟主机配置它。
组件 覆盖 不覆盖
通配符 DNS *.example.com所有第一级子域 (a.example.com)子子域 (a.b.example.com)
通配符 SSL *.example.comblog / shop / app.example.com没有子域的 example.com* 和 a.b.example.com

*注意:某些通配符 SSL 证书也将根域 (example.com) 作为 SAN 条目包含,但并非全部如此。在生产环境中使用前,始终检查证书的使用者备用名称列表。

限制和安全考虑

最佳实践:使用通配符 DNS 以及应用程序级路由,在提供内容之前验证子域。永远不要在不验证的情况下为每个可能的子域提供内容。

警告(安全和意外的全面捕获)

通配符的便利性伴随着您在部署到生产环境之前应该了解的风险。许多人忽视的关键点是通配符会创建意外的"全面捕获" — 任何人输入的每个名称都会到达您的服务器,即使是您从未打算存在的名称。

子域接管和网络钓鱼

如果您的服务器在不检查的情况下回复每个子域,攻击者可以使用您品牌下的奇怪子域,例如 login-secure.example.com,托管一个令人信服的网络钓鱼页面,因为它位于您的真实域名下而显得可信。防御方式是让您的应用程序拒绝不在允许列表中的任何主机,返回 404 或重定向到您的主页。

Cookie 范围在子域之间泄露

如果您使用域 .example.com 设置 cookie,该 cookie 会发送到每个子域 — 包括多租户系统中其他租户的子域 — 这可能导致会话或令牌跨客户泄露。将 cookie 范围限制到仅需要它们的特定子域。

监控和日志记录

常见问题解答 (FAQ)

通配符子域与正常创建子域有什么不同?

正常创建子域意味着添加每个名称的 DNS 记录(blog.example.com、shop.example.com)。通配符使用单个记录 *.example.com,它匹配没有自己特定记录的每个名称 — 当您有许多子域或在运行时动态创建它们时非常适合。

通配符记录是否覆盖 a.b.example.com 这样的子子域?

不。*.example.com 仅匹配子域的一个级别。要使 a.b.example.com 工作,您必须添加单独的 *.b.example.com 记录。

我可以为电子邮件 (MX) 使用通配符吗?

不建议。通配符 MX 记录不受所有邮件系统支持,并导致邮件传递不可预测。仅为真正需要接收电子邮件的特定域或子域设置 MX 记录。

我应该为通配符记录设置什么 TTL?

在测试期间使用低 TTL 如 300 秒,以便更改快速生效。一旦设置稳定,将其提高到 3600 秒或更多以减少查询负载并加快解析。

需要支持通配符子域的托管吗?

AsiaGB 托管支持任何规模项目的通配符 DNS 配置和通配符 SSL 证书。

获取 AsiaGB 托管