在配置 CDN、对象存储、自定义域名时,我们经常会看到一个配置项:CNAME

比如 CDN 控制台可能会让你添加一条解析记录:

主机记录

记录类型

记录值

www

CNAME

xxx.edgeonecdn.com

很多人第一次看到会疑惑:
CNAME 是不是跳转?为什么配置了 CNAME,浏览器地址栏没有变?它和 A 记录有什么区别?

这篇文章就把 CNAME 讲清楚。

一、CNAME 是什么?

CNAME 的全称是 Canonical Name Record,中文一般叫别名记录

它的作用很简单:把一个域名指向另一个域名

比如:

域名

记录类型

指向

www.example.com

CNAME

xxx.cdn.com

意思是:

当用户查询 www.example.com 时,不直接返回 IP,而是告诉 DNS:这个域名的别名是 xxx.cdn.com,你继续去查它。

所以 CNAME 本质上不是“跳转”,而是 DNS 层面的别名关系

二、CNAME 的解析流程

假设你配置了:

主机记录

类型

www

CNAME

www.example.com.edgeonecdn.com

用户访问:

https://www.example.com

大概流程如下:

  1. 浏览器向 DNS 查询 www.example.com

  2. DNS 发现它不是 A 记录,而是 CNAME。

  3. DNS 返回:www.example.com 的别名是 www.example.com.edgeonecdn.com

  4. 继续查询这个 CDN 域名对应的 A / AAAA 记录。

  5. DNS 返回一个合适的 CDN 节点 IP。

  6. 浏览器连接 CDN 节点。

  7. CDN 如果有缓存,就直接返回内容;如果没有缓存,就回源到你的服务器。

也就是说,最终用户连接的不是你的源站 IP,而是 CDN 节点 IP。

三、为什么 CDN 常用 CNAME?

因为 CDN 的核心能力就是智能调度

如果你直接把域名 A 记录写死到某个 IP:

域名

类型

www.example.com

A

1.2.3.4

那么所有用户都会访问这个固定 IP。

但 CDN 不一样,它希望根据用户所在地区、运营商、网络质量、节点负载,动态返回不同节点。

比如:

用户位置

可能访问的节点

北京用户

华北 CDN 节点

上海用户

华东 CDN 节点

广州用户

华南 CDN 节点

海外用户

海外 CDN 节点

所以 CDN 厂商通常会给你一个 CNAME 地址,让你的业务域名指向它。

这样 CDN 厂商就可以在它自己的 DNS 系统里做智能调度。

四、CNAME 和 A 记录有什么区别?

类型

作用

示例

常见场景

A 记录

域名直接指向 IPv4 地址

example.com -> 1.2.3.4

直接访问服务器

AAAA 记录

域名直接指向 IPv6 地址

example.com -> 240e::1

IPv6 访问

CNAME

域名指向另一个域名

www.example.com -> xxx.cdn.com

CDN、对象存储、SaaS 平台

简单理解:

  • A 记录:直接告诉你门牌号。

  • CNAME:告诉你这个名字其实是另一个名字,再去查那个名字的门牌号。

五、CNAME 不是 301/302 重定向

这是最容易搞混的地方。

CNAME 是 DNS 层面的事情,发生在浏览器真正请求网站之前。

301/302 是 HTTP 层面的事情,发生在浏览器已经访问服务器之后。

CNAME 和重定向区别

比如你配置:

域名

类型

www.example.com

CNAME

xxx.cdn.com

用户浏览器地址栏仍然显示:

https://www.example.com

不会变成:

https://xxx.cdn.com

但如果你配置的是 301 重定向:

https://www.example.com -> https://example.com

那么浏览器地址栏会真的变成:

https://example.com

所以:

对比项

CNAME

301/302

所在层级

DNS 层

HTTP 层

是否改变地址栏

不改变

改变

主要用途

域名解析、CDN 接入

域名规范化、页面跳转

浏览器是否能直接看到

通常看不到

能看到 Location 跳转

六、结合 CDN 的完整访问链路

以 EdgeOne、阿里云 CDN、腾讯云 CDN 这类产品为例,配置完成后通常是这样:

域名

解析方式

www.example.com

CNAME 到 CDN 分配的域名

CDN 域名

由 CDN 厂商动态解析到节点 IP

CDN 节点

缓存资源或回源到你的 Nginx

源站服务器

真正存放网站内容

用户访问时看到的是:

www.example.com

但实际链路是:

用户浏览器 → DNS → CDN 节点 → 源站服务器

这也是 CDN 能隐藏源站 IP、提升访问速度、减少源站压力的原因。

七、根域名能不能配置 CNAME?

这里要注意一个常见问题:
很多 DNS 服务商不允许根域名直接配置 CNAME

比如:

example.com

这个叫根域名,也常用 @ 表示。

传统 DNS 规范里,根域名通常还需要配置 NS、SOA、MX 等记录。如果直接配置 CNAME,可能会和这些记录冲突。

所以很多平台会提供类似能力:

名称

作用

CNAME Flattening

表面是根域名,底层自动追踪 CNAME

ALIAS 记录

类似 CNAME,但可用于根域名

ANAME 记录

类似 ALIAS,也常用于根域名

如果你的 CDN 支持根域名接入,它通常会在后台帮你处理这个问题。

八、配置 CNAME 时要注意什么?

  1. 不要同时给同一个主机记录配置 CNAME 和 A 记录。
    比如 www 已经是 CNAME,就不要再给 www 配 A 记录。

  2. CNAME 只负责解析,不负责 HTTPS 证书。
    如果你访问的是 https://www.example.com,CDN 边缘证书仍然要覆盖 www.example.com

  3. CNAME 不等于隐藏所有信息。
    它可以让用户访问 CDN 节点,但如果源站 IP 在其他地方暴露,仍然可能被直接访问。

  4. CNAME 不会自动做 www 到根域名的跳转。
    如果你想让 www.example.com 跳到 example.com,需要配置 301/302 重定向。

  5. 修改 CNAME 后不会全球立刻生效。
    DNS 有 TTL 缓存,可能需要几分钟到数小时。

九、一个实际例子

假设你的网站是:

lautung.com

你想让:

www.lautung.com

接入 EdgeOne CDN,那么可能会配置:

主机记录

类型

www

CNAME

EdgeOne 分配的 CNAME 地址

如果你希望最终统一访问根域名:

https://lautung.com

还需要在 CDN 或 Nginx 配置:

来源

目标

状态码

https://www.lautung.com

https://lautung.com

301

这里 CNAME 和 301 是两个不同动作:

  • CNAME:让 www.lautung.com 先接入 CDN。

  • 301:让浏览器从 www.lautung.com 跳到 lautung.com

十、总结

CNAME 可以理解为 DNS 世界里的“别名”。

它的核心作用是:

让一个域名指向另一个域名,再由另一个域名继续解析到最终 IP。

在 CDN 场景里,CNAME 非常重要,因为它让 CDN 厂商可以接管调度能力,根据用户位置和网络情况返回最合适的节点。

最后记住三句话:

  1. CNAME 是 DNS 层别名,不是网页跳转。

  2. CNAME 不会改变浏览器地址栏。

  3. CDN 使用 CNAME,是为了动态调度到最合适的边缘节点。