通配符 CNAME 记录(*.example.com)合法吗
通配符 CNAME 符合 DNS 标准,但匹配取决于最近存在祖先、已有节点和委派,不是简单匹配所有子域。解释与普通记录共存、区域顶点及 TLS 通配符的区别。
一句话回答:通配符 CNAME 合法,但 DNS 通配符按最近存在祖先等规则生成应答,并非简单匹配所有未单独配置的子域。已有节点、委派和区域边界会影响结果;普通 CNAME 不能与同名 A/MX 等数据共存,区域顶点也不能使用普通 CNAME。
它能干什么
*.example.com. 300 CNAME sites.hosting.com.
之后 a.example.com、blog.example.com、任意没单独配过记录的子域名,都会解析到 sites.hosting.com。多租户 SaaS({租户}.example.com)就靠它避免"每加一个租户配一条记录"。
四条关键规则
- 只兜底未定义的名字:已显式配置
blog.example.com A 192.0.2.4后,blog 走 A 记录,通配符对它不生效——显式记录永远优先 - 同名不能共存其他记录:
*.example.com已有 CNAME 就不能再加它的 TXT/A 记录 - 不能用于根域名:
example.com本身必须有 SOA/NS,无法 CNAME(用 ALIAS/Flattening 解决) - DNS 通配符不受一级限制:若
b.example.com不存在,*.example.com可为a.b.example.com合成答案;若 b 存在(包括空非终结节点),最近已存在祖先改变,需要检查*.b.example.com。委派也会形成边界。不要与只匹配一个标签的 TLS 泛域名证书混淆。
与通配符 A 记录的对比
| 通配符 CNAME | 通配符 A | |
|---|---|---|
| 指向 | 域名(跟随目标 IP 变化) | 固定 IP |
| 目标换 IP | 自动跟随 | 要手动改 |
| 适用 | 指向平台/CDN 域名 | 指向自己的固定服务器 |
指 SaaS/托管平台用 CNAME;自己服务器的固定 IP 用 A 更直接。
配套提醒
- 证书:通配符 DNS 通常要配泛域名证书(
*.example.com),否则 HTTPS 到各子域名报证书错误 - 源站校验:服务器/网关收到任意子域名的 Host 头要有兜底处理,避免陌生域名也落到你的应用
常见问题(FAQ)
Q:有些文章说通配符 CNAME 不合法,怎么回事?
A:那是把"CNAME 不能与其他记录共存"的规则误读了。通配符本身合法(RFC 1034/4592),限制只在"同一名字下 CNAME 不能与其他记录共存"以及"不能用于区域顶点"。具体控制台支持范围需看对应服务商文档,本文未进行现场测试。
Q:通配符 CNAME 指向的目标又是个 CNAME 可以吗?
A:技术上解析器会跟随链路,但不推荐——额外查询取决于应答中已有记录和缓存,排障也复杂。尽量指向最终目标。
Q:为什么我的 *.example.com 配了不生效?
A:按序排查:该子域名是否已有显式记录(优先于通配);本地 DNS 缓存(ipconfig /flushdns);TTL 未过期;部分服务商控制台要求输入 * 作为主机记录,确认没写成 *.example.com.example.com。
参考资料
本文依据官方资料核对,未进行现场运行测试;代码与配置示例需结合实际版本、权限和环境验证。