如何为您的域名添加子域名
子域名是附加在根域名前面的前缀,在同一域名下创建一个独立的、可独立寻址的命名空间。例如,给定根域名 example.com,主机名 blog.example.com 是一个完全限定的子域名,其中 blog 是第三级标签。子域名通过 DNS 记录解析——通常是指向 IPv4 地址的 A 记录、用于 IPv6 的 AAAA 记录,或别名另一个主机名的 CNAME 记录——且无需额外的域名注册费用。
从实际角度来看,子域名允许您在单个已注册域名下运行独立的 Web 应用程序、预发布环境、区域站点或微服务,并拥有独立的文档根目录、SSL 证书和服务器配置。本指南涵盖完整的技术流程:DNS 记录创建、托管配置、SSL 部署、传播验证,以及大多数教程所忽略的常见故障模式。
什么是子域名,它与子目录有何不同
在接触 DNS 之前,有必要了解子域名与子目录之间的架构差异,因为这一选择会影响 SEO、服务器配置和 SSL 范围。
| 特性 | 子域名 (`blog.example.com`) | 子目录 (`example.com/blog`) |
|---|---|---|
| 是否需要 DNS 记录 | 是(A、AAAA 或 CNAME) | 否 |
| 独立文档根目录 | 是 | 可选 |
| 独立 SSL 证书 | 是(或通配符) | 与根域名共享 |
| 被 Google 视为独立站点 | 通常是,取决于内容 | 否 |
| 可使用独立服务器 / VPS | 是 | 需要反向代理 |
| Session / Cookie 范围 | 默认独立 | 共享 |
| 设置复杂度 | 中等 | 低 |
| 适用场景 | 应用程序、预发布环境、区域站点 | 博客板块、产品页面 |
Google 的 John Mueller 已确认,当内容明显相关时,Google 通常将子域名视为同一站点的一部分,但抓取预算、索引和链接权重的行为可能有所不同。对于与主站紧密集成的内容(如公司博客),子目录通常是阻力更小的选择。对于独立应用程序——客户门户、API 网关或预发布环境——子域名才是正确的架构决策。
子域名的常见使用场景
- 预发布和 QA 环境:
staging.example.com或dev.example.com——与生产环境隔离,通常通过 HTTP Basic Auth 或 IP 白名单进行保护。 - API 端点:
api.example.com——支持独立部署、速率限制和 TLS 终止。 - 客户门户或 SaaS 仪表板:
app.example.com——独立的身份验证上下文和 Session Cookie。 - 区域或语言特定站点:
de.example.com、us.example.com——支持hreflang定向和地理特定的服务器路由。 - 文档和支持:
docs.example.com、support.example.com——通常托管在 GitBook、Zendesk 或自托管 Wiki 等平台上。 - CDN 或媒体分发:
cdn.example.com、static.example.com——CNAME 指向 CDN 边缘网络。 - 邮件基础设施:
mail.example.com——用作 SMTP/IMAP 服务的主机名,与 MX 记录不同。
第一步:访问 DNS 管理界面
域名的 DNS 记录在域名的权威名称服务器所在位置进行管理。这与您的 Web 托管位置不一定相同。权威名称服务器由域名注册商处的 NS 记录定义。
确定您的 DNS 在哪里管理:
dig NS example.com +short如果输出显示属于您注册商的名称服务器(例如 ns1.registrar.com),请在注册商处管理 DNS。如果显示属于托管服务商或 Cloudflare 等服务的名称服务器,请改在那里管理 DNS。
确定正确的控制面板后:
- 登录 DNS 管理界面。
- 找到 DNS Zone Editor、DNS Management 或 Zone File 部分。
- 选择您要为其创建子域名的域名。
如果您的域名是通过 AlexHost 域名注册注册的,DNS 区域编辑器可直接从您的客户区仪表板访问。
第二步:为子域名创建 DNS 记录
您将根据基础设施创建以下三种记录类型之一。
A 记录——指向 IPv4 地址
当子域名解析到特定服务器 IP 地址时,使用 A 记录。这是托管在 VPS 或独立服务器上的子域名最常见的场景。
| 字段 | 值 |
|---|---|
| 类型 | A |
| 名称 / 主机 | blog(而非 blog.example.com) |
| 值 / 指向 | 203.0.113.42(您服务器的公网 IP) |
| TTL | 3600(或在初始设置期间使用 300 以加快迭代速度) |
关键细节:在名称字段中只输入子域名标签——blog,而非 blog.example.com。大多数 DNS 界面会自动附加根域名。输入完整的 FQDN 将会为 blog.example.com.example.com 创建记录。
AAAA 记录——指向 IPv6 地址
结构与 A 记录相同,但值为完整的 IPv6 地址:
| 字段 | 值 |
|---|---|
| 类型 | AAAA |
| 名称 / 主机 | blog |
| 值 | 2001:db8::1 |
| TTL | 3600 |
CNAME 记录——别名另一个主机名
当子域名应解析到另一个主机名而非直接 IP 时,使用 CNAME 记录。常见场景包括指向 CDN、第三方平台(Shopify、HubSpot、Netlify)或另一个内部主机名。
| 字段 | 值 |
|---|---|
| 类型 | CNAME |
| 名称 / 主机 | shop |
| 值 / 目标 | shops.myplatform.com.(注意末尾的点——表示 FQDN) |
| TTL | 3600 |
架构限制: CNAME 记录不能与同一标签下的任何其他记录类型共存。您不能为 example.com 本身(区域顶点)创建 CNAME——只能为子域名创建。在顶点处,使用 A 记录,或者如果您的 DNS 提供商支持,使用专有的 ALIAS 或 ANAME 记录。
通配符子域名记录
通配符 A 记录将任何未定义的子域名解析到单个 IP:
| 字段 | 值 |
|---|---|
| 类型 | A |
| 名称 / 主机 | * |
| 值 | 203.0.113.42 |
| TTL | 3600 |
这对于每个客户都有子域名的多租户 SaaS 应用程序非常有用(例如 customer1.example.com)。请注意,通配符记录不会自动为每个子域名部署 SSL——您需要通配符 SSL 证书或支持 DNS-01 质询的 ACME 客户端。
第三步:配置 Web 服务器或托管面板
创建 DNS 记录使子域名可解析,但不会自动提供内容服务。您必须配置 Web 服务器或托管面板以接受并路由新主机名的请求。
在 cPanel 中配置子域名
如果您的托管使用 cPanel——可在带 cPanel 的 VPS 方案中使用——操作步骤如下:
- 登录 cPanel。
- 导航至域名 > 子域名。
- 在子域名字段中,输入标签(例如
blog)。 - 从下拉菜单中选择根域名。
- 设置文档根目录——cPanel 默认为
public_html/blog,但您可以指定任意路径。 - 点击创建。
如果域名的 DNS 在本地管理,cPanel 会自动在 WHM 的 BIND 区域中创建 DNS A 记录。如果 DNS 由外部管理(例如 Cloudflare),您必须按照第二步所述在那里手动添加记录。
在 Nginx 中配置子域名
对于运行 Nginx 的 VPS,创建一个新的 server block:
server {
listen 80;
listen [::]:80;
server_name blog.example.com;
root /var/www/blog;
index index.html index.php;
access_log /var/log/nginx/blog.access.log;
error_log /var/log/nginx/blog.error.log;
location / {
try_files $uri $uri/ =404;
}
}将文件保存到 /etc/nginx/sites-available/blog.example.com,然后启用它:
sudo ln -s /etc/nginx/sites-available/blog.example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx在 Apache 中配置子域名
在 /etc/apache2/sites-available/blog.example.com.conf 创建一个新的虚拟主机文件:
<VirtualHost *:80>
ServerName blog.example.com
DocumentRoot /var/www/blog
<Directory /var/www/blog>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/blog.error.log
CustomLog ${APACHE_LOG_DIR}/blog.access.log combined
</VirtualHost>启用并重新加载:
sudo a2ensite blog.example.com.conf
sudo apache2ctl configtest
sudo systemctl reload apache2第四步:为子域名部署 SSL 证书
每个提供 Web 流量的子域名都应使用 TLS 进行保护。子域名是一个独立的主机名,除非您使用通配符证书,否则不受根域名单域证书的保护。
选项 1——使用 Certbot 的 Let’s Encrypt(单个子域名)
sudo certbot --nginx -d blog.example.com或用于 Apache:
sudo certbot --apache -d blog.example.comCertbot 会自动修改虚拟主机配置并设置续期的 cron 任务。
选项 2——Let’s Encrypt 通配符证书(DNS-01 质询)
通配符证书覆盖 *.example.com,用单个证书保护所有当前和未来的子域名。这需要 DNS-01 质询验证:
sudo certbot certonly
--manual
--preferred-challenges dns
-d "*.example.com"
-d "example.com"Certbot 将提示您在 DNS 区域中创建 TXT 记录(_acme-challenge.example.com)。添加记录并验证传播后,Certbot 将颁发证书。通配符证书必须每 90 天续期一次;使用您提供商的 DNS 插件自动续期(例如 certbot-dns-cloudflare)。
选项 3——商业 SSL 证书
对于需要扩展验证(EV)或更长有效期的组织,来自受信任 CA 的商业证书是合适的选择。AlexHost 提供 SSL 证书,包括域名验证、组织验证和通配符选项。购买后,通过将 .crt 和 .key 文件放置在服务器上并在虚拟主机配置中引用它们来安装证书。
第五步:验证 DNS 传播
DNS 更改不会在您保存后立即在全球生效。每个解析器会在 TTL 值的持续时间内缓存记录。TTL 为 3600 时,解析器可能在您更改后最多一小时内仍提供旧记录。
从多个全球视角检查传播情况:
# Check from a specific DNS resolver
dig A blog.example.com @8.8.8.8 +short
dig A blog.example.com @1.1.1.1 +short
# Check authoritative answer directly
dig A blog.example.com +trace如需可视化的多区域检查,请使用 whatsmydns.net 或 dnschecker.org。对于 TTL 为 3600 或更低的情况,完整的全球传播通常在 15 分钟到 2 小时内完成。常被引用的”最多 48 小时”主要适用于之前记录上设置的 TTL 值为 86400(24 小时)的情况——这是许多注册商的常见默认值。
专业提示:在进行 DNS 更改之前,至少提前一个 TTL 周期将现有记录的 TTL 降低至 300(5 分钟)。这将在实际更改期间大幅减少传播等待时间。
第六步:测试端到端功能
传播完成后,执行完整的功能测试:
# Confirm DNS resolution
dig A blog.example.com +short
# Confirm HTTP response
curl -I http://blog.example.com
# Confirm HTTPS and certificate validity
curl -I https://blog.example.com
# Inspect the TLS certificate
openssl s_client -connect blog.example.com:443 -servername blog.example.com </dev/null 2>/dev/null
| openssl x509 -noout -subject -dates验证以下内容:
curl -I响应返回200 OK或预期的重定向代码。- TLS 证书主题与
blog.example.com或*.example.com匹配。 - 证书到期日期正确。
- 浏览器开发者控制台中没有混合内容警告。
常见陷阱及如何避免
区域顶点处的 CNAME:尝试为 example.com 本身创建 CNAME 记录将破坏邮件传递和其他 DNS 记录。在顶点处使用 A 记录或 ALIAS/ANAME 记录。
Web 服务器未提供子域名服务:DNS 解析正确,但浏览器返回 404 或连接被拒绝。原因:Web 服务器没有与子域名主机名匹配的虚拟主机。解决方案:按照第三步所述添加 server block 或虚拟主机。
SSL 证书不匹配:浏览器显示证书错误。原因:现有证书仅覆盖 example.com,而非 blog.example.com。解决方案:专门为子域名颁发新证书,或替换为通配符证书。
cPanel 创建本地 DNS 记录但 DNS 由外部管理:当使用 Cloudflare 或其他外部 DNS 提供商与 cPanel 托管时,cPanel 的子域名向导会在 WHM 的本地 BIND 区域中创建记录,而该区域从不会被查询。您必须在 Cloudflare(或您的外部 DNS 提供商)中手动添加 A 记录。这是共享托管用户最常见的困惑来源之一。
通配符 DNS 没有通配符 SSL: *.example.com DNS 记录将所有子域名解析到您的服务器,但除非安装了通配符 SSL 证书,否则每个新子域名都会触发证书警告。不要仅依赖通配符 DNS 用于生产子域名。
Cookie 范围泄漏:如果您的应用程序在 .example.com(注意前导点)上设置 Cookie,这些 Cookie 将被发送到所有子域名。这可能会将高安全性子域名的 Session Token 暴露给安全性较低的子域名。请将 Cookie 明确限定在目标主机名范围内。
不同托管环境中的子域名管理
| 托管类型 | DNS 管理 | Web 服务器配置 | SSL 部署 |
|---|---|---|---|
| 共享托管 | 注册商或 cPanel DNS 区域 | cPanel 子域名向导 | cPanel 中的 AutoSSL / Let’s Encrypt |
| VPS(非托管) | 注册商或外部 DNS | 手动配置 Nginx / Apache vhost | Certbot CLI |
| 带 cPanel 的 VPS | WHM / cPanel DNS 或外部 | cPanel 子域名向导 | AutoSSL |
| 独立服务器 | 注册商或 BIND/PowerDNS | 手动或控制面板 | Certbot 或商业 CA |
| 云(AWS、GCP) | Route 53 / Cloud DNS | 负载均衡器 / Ingress 规则 | ACM / Let’s Encrypt |
对于需要完整 root 访问权限和自定义服务器配置的高流量应用程序,独立服务器可让您完全控制 DNS、Web 服务器软件和证书管理,不受共享环境的限制。
技术决策检查清单
在创建子域名之前,请完成以下检查:
- 权威名称服务器在哪里?在登录任何面板之前,运行
dig NS example.com +short进行确认。 - A 记录还是 CNAME?对于服务器 IP 使用
A/AAAA。对于第三方平台主机名使用CNAME。永远不要在区域顶点使用CNAME。 - Web 服务器是否配置为接受新主机名?仅有 DNS 记录不能提供内容服务。
- 子域名是否需要自己的 SSL 证书?是的,除非已安装通配符证书。
- 更改前 TTL 是否已设置为较低值?在进行更改前至少一个 TTL 周期将其降低至
300,以最小化传播延迟。 - cPanel 是否在本地管理 DNS,而外部提供商是权威的?如果是,请在外部提供商处添加记录,而非 cPanel。
- 子域名是否需要阻止搜索引擎索引?如果是预发布或内部环境,请在服务器级别添加
X-Robots-Tag: noindex或使用 HTTP Basic Auth。 - Cookie 范围是否正确定义?在 Cookie 上明确设置
Domain属性,以防止意外的跨子域名共享。
常见问题
我可以在没有根域名 DNS 访问权限的情况下创建子域名吗?
不可以。子域名需要在根域名区域中有 DNS 记录(A、AAAA 或 CNAME)。如果没有对权威 DNS 区域的写入权限,您无法创建可公开解析的子域名。
子域名会影响根域名的 SEO 吗?
这取决于内容关系和内部链接。Google 可以将子域名与根域名关联,但链接权重的流动不如子目录 URL 之间那么自由。对于与主站紧密集成的内容,从 SEO 角度来看,子目录通常更为可取。对于独立应用程序或预发布环境,子域名是正确的选择,如果不打算用于公开搜索,应将其 noindex。
一个域名下可以创建多少个子域名?
DNS 规范对子域名数量没有实际限制。注册商和托管面板可能会施加软限制,但这些是管理性的,而非技术性的。单个域名可以拥有数百个子域名。
通配符 DNS 记录和通配符 SSL 证书有什么区别?
通配符 DNS 记录(*.example.com)在 DNS 层将所有未定义的子域名路由到单个 IP 地址。通配符 SSL 证书(*.example.com)在 TLS 层保护所有一级子域名。它们是独立的:您可以只有其中一个,但要在不单独部署证书的情况下通过 HTTPS 为所有子域名提供服务,两者都是必需的。
为什么我的子域名在 dig 中解析正确,但浏览器返回错误?
DNS 解析和 HTTP 服务是独立的层。如果 dig 返回正确的 IP,但浏览器显示错误,则该 IP 上的 Web 服务器未配置为处理该主机名的请求(Nginx 中的 server_name 或 Apache 中的 ServerName)。添加适当的虚拟主机块并重新加载 Web 服务器。
