什么是CNAME记录?
CNAME(规范名称)记录是创建从一个域名到另一个域名的别名的DNS记录类型。与直接指向IP地址的A记录不同,CNAME指向另一个域名,然后被解析为IP地址。
CNAME记录的工作原理
当你设置CNAME时:
www.example.com. IN CNAME example.com.
解析过程:
1. 用户请求www.example.com
2. DNS找到指向example.com的CNAME
3. DNS然后解析example.com的A记录
4. 返回最终IP地址
这种链式解析意味着CNAME目标最终必须解析为A或AAAA记录。
常见CNAME使用案例
WWW子域
将www指向你的根域:
www IN CNAME example.com.
CDN集成
指向CDN端点:
cdn.example.com IN CNAME d111111abcdef8.cloudfront.net.
平台托管
指向托管提供商:
blog.example.com IN CNAME yoursite.wordpress.com.
shop.example.com IN CNAME shops.myshopify.com.
SaaS应用
连接子域到SaaS平台:
docs.example.com IN CNAME example.gitbook.io.
status.example.com IN CNAME stats.uptimerobot.com.
CNAME与A记录
| 情景 | 使用CNAME | 使用A记录 |
|---|---|---|
| 根域(@) | ❌不允许 | ✅必需 |
| 子域到静态IP | 两者都可以 | ✅直接 |
| 子域到提供商 | ✅首选 | ❌IP可能改变 |
| CDN配置 | ✅典型 | 变化 |
| 负载平衡 | ❌不能有多个 | ✅多个IP |
为什么根域不能使用CNAME
DNS规范(RFC 1034)禁止CNAME记录与相同名称的其他记录类型共存。由于根域需要SOA和NS记录,它们不能有CNAME记录。
根域别名解决方案:- ALIAS/ANAME记录:DNS提供商特定的伪记录
- CNAME扁平化:Cloudflare和其他将CNAME解析为A记录
- 重定向www到根:对www使用CNAME,在应用程序级别重定向到@
CNAME链
CNAME可以指向其他CNAME(链):
blog.example.com → myblog.host.com
myblog.host.com → lb-1234.hosting.com
lb-1234.hosting.com → 203.0.113.50(A记录)
虽然有效,但链增加延迟。大多数DNS提供商限制链长度以防止无限循环。
CNAME记录配置
基本语法
subdomain IN CNAME target.domain.com.
重要:目标域应包括尾点(.)以表示它是完全合格的。没有它,某些DNS服务器会附加源域。
TTL考虑
CNAME TTL影响更改传播速度有多快:
www 300 IN CNAME example.com.
较低的TTL(300秒)允许更快的更新;较高的TTL减少DNS查询。
检查CNAME记录
使用dig:dig www.example.com CNAME
; 答案部分:
www.example.com. 300 IN CNAME example.com.
完整解析跟踪:
dig +trace www.example.com
常见CNAME问题
根域的CNAME
example.com IN CNAME other.com. ; 无效
这会中断电子邮件(MX记录)和其他服务。
CNAME与其他记录
blog.example.com IN CNAME host.com.
blog.example.com IN MX mail.host.com. ; 无效
带有CNAME的名称不能有其他记录类型。
缺失目标记录
如果CNAME目标不解析,你的子域也不会工作。在配置CNAME前验证目标有效。
最佳实践
1. 对第三方服务使用CNAME:让提供商管理IP更改
2. 避免深层链:每一跳增加延迟
3. 不要在根使用CNAME:使用A记录或ALIAS
4. 包括尾点:确保完全合格的目标名称
5. 监控CNAME目标:外部更改可能影响你的网站