CNAME 是什么
CNAME 记录把域名做成另一个域名的别名:解析时先找到别名,再继续查询目标域名的记录,最终拿到地址。它最常见的用途是把服务托管给第三方——把子域名指向服务商给出的域名之后,对方调整后端地址时不需要你改动任何配置。代价是多一次解析跳转,并且别名是「整名字替换」语义,同一名字上不能再放其他类型的记录。
基本信息
| 类型 | CNAME,类型编码 5 |
|---|---|
| 记录值 | 另一个域名,不能是地址 |
| 规范 | RFC 1034 §3.6.2 定义别名语义,RFC 1035 §3.3.1 规定格式 |
| 约束 | 同一名字不得与其他类型记录共存;区域顶点通常不允许使用 |
| 最佳实践 | 目标域名由对方提供,不要指向自己的另一个子域再绕回来 |
典型使用场景
- 把站点托管给第三方:对方变更后端时你不用改配置
- 统一入口:把多个子域名指向同一个规范域名,便于集中管理
- 灰度与切换:指向不同的服务商域名即可完成流量迁移
- 加速接入:把静态资源子域指向服务商域名,交给对方做边缘分发
- 临时验证:先加一条别名记录确认链路,再决定是否正式切换
别名链与查询
别名链与查询
dig +noall +answer www.example.com CNAME # 只看别名记录本身
dig +short www.example.com # 看最终解析出来的地址,需要跟随别名
dig www.example.com A +noall +answer +additional # 一次看清别名与目标记录
# 区域文件里的写法
shop.example.com. 600 IN CNAME shop.example-cdn.net.输出怎么读
| 字段 | 含义 | 正常与异常 |
|---|---|---|
| 记录名 | 别名所在的域名 | 写成相对名会被自动补全,容易出现奇怪域名 |
| 记录值 | 指向的目标域名 | 必须以点结尾才是完整域名 |
| 生存时间 | 别名本身缓存多久 | 目标域名另有自己的缓存时间,两者叠加 |
| 是否带地址 | 别名记录不含地址 | 出现地址说明查的是目标记录而不是别名 |
排查要点
- 别名指向的目标必须能独立解析,否则链路会在第二跳断掉
- 用不跟随别名的查询方式看清楚每一跳,避免只看最终结果而误判中间环节
- 邮件相关记录指向别名会引发兼容问题,邮件服务器地址应直接使用主机记录
- 需要按地域或就近接入时,由服务商在目标域名侧做调度,别名本身不参与调度
别名会增加一次解析跳转,首次解析的耗时略高;同时顶层域名通常不允许直接使用别名,因为该位置必须保留区域自身的授权记录。部分服务商提供「展平」类记录来绕过这个限制,本质是在解析时把目标地址直接写回。
把别名与通配符混用时结果常与预期不符,因为通配符的匹配优先级会先生效。迁移这类配置前,务必用具体域名逐个验证解析结果。
别名链怎么验证
- 先用不跟随别名的查询方式看一眼指向谁,再用跟随方式确认最终地址
- 从多个公共解析器分别查询,确认目标域名在各地解析结果一致
- 检查是否形成环路:三层以上互相指向会让解析直接超时或失败
- 迁移完成后清理不再使用的别名,残留配置会误导后续排查
配置前的三个确认
- 确认目标域名由对方提供且长期稳定,不要指向自己另一个子域来回绕
- 确认该名字上不再需要其他类型的记录,别名是整名字替换语义
- 确认解析链不超过两跳,每多一跳都多一次等待与失败可能