主题
域名、DNS 与把网站发布上线
上一课你已经在报文里看到
Host: www.myxbw.cn了。但域名是怎么变成一台真实服务器的?为什么给learn加一条记录,网页就能被别人访问?这一课把"买名字 → 指地址 → 配证书 → 发布上线"这条链路走完一遍,用的全是你自己那套 myxbw.cn 的真实配置。
一、域名从右往左读
learn.myxbw.cn 这个字符串要从右往左看:
text
learn . myxbw . cn
│ │ └─ 顶级域(TLD):.cn / .com / .net,由域名管理机构统一管理
│ └──────── 二级域:myxbw,这是你在阿里云花钱注册下来的"地皮"
└──────────────── 子域:learn / www,名字随便起,数量不限,不要额外花钱打个比方:注册二级域 = 租一块地皮(要花钱、要年费、全网唯一);加子域 = 在这块地上盖房子(免费、无限、想盖几间盖几间)。
根域名(也就是 myxbw.cn 本身,记录里写成 @)和 www.myxbw.cn 在 DNS 眼里是两个完全不同的名字,可以指向完全不同的地方。这就是为什么你既配了根域的 A 记录,又配了 www 的 CNAME——它们不会自动互相同步,这个坑后面还会专门讲。
二、常见 DNS 记录类型
DNS 是一张巨大的"名字 → 值"对照表,记录类型决定了"值"是什么。
| 类型 | 值是什么 | 用途 | 你能用到的场景 |
|---|---|---|---|
| A | 一个 IPv4 地址 | 名字直接指向服务器 | myxbw.cn → 76.76.21.21 |
| AAAA | 一个 IPv6 地址 | 同上,走 IPv6 | 现在一般不用自己配 |
| CNAME | 另一个域名 | 别名:我等同于它 | www / learn → cname.vercel-dns.com |
| MX | 邮件服务器域名 | 决定谁来收这个域的邮件 | 配企业邮箱时会用到 |
| TXT | 任意文本 | 身份验证、域名归属证明 | Vercel、搜索引擎、邮箱都靠它验你的域名 |
| NS | 权威 DNS 服务器名 | 告诉全网"这个域该问谁" | myxbw.cn 的是 dns19/dns20.hichina.com |
| CAA | 允许的证书颁发机构 | 限制谁能给你的域签证书 | 加固项,可选 |
你现在的配置,其实就三条关键记录:
| 主机记录 | 类型 | 记录值 | 作用 |
|---|---|---|---|
@ | A | 76.76.21.21 | 根域 myxbw.cn 直接指向 Vercel 的节点 |
www | CNAME | cname.vercel-dns.com | 知识库站 |
learn | CNAME | cname.vercel-dns.com | 本站 |
CNAME 的语义是"我这个名字的实现等同于那个名字":访问 www.myxbw.cn 时,DNS 会告诉你"去买 cname.vercel-dns.com 的账",Vercel 的智能 DNS 再根据你的地理位置返回离你最近的节点 IP。好处是 Vercel 换节点你完全不用管;代价是 CNAME 不能和同名的其他记录共存(一个名字要么是别名,要么是具体地址)。
三、一次解析的完整链路与缓存
text
浏览器缓存 → 操作系统缓存 → 本地/运营商 DNS → 根服务器
→ .cn 顶级域服务器 → 权威 DNS(dns19/dns20.hichina.com)→ 拿到记录这条链路上每一环都会缓存结果,缓存时长由记录的 TTL(Time To Live,存活时间)决定。阿里云默认 TTL 一般是 10 分钟,你可以调到 1 分钟(更快生效)或 1 小时(更省查询)。
拿地皮打比方:TTL 就是"这张地址条的有效期"。改了记录之后,别人手里的旧地址条要等过期才会被换掉——所以"我改完了怎么还打不开"十有八九不是没生效,而是别人(或你自己)还揣着旧地址条。 想立刻验证,把本地缓存刷掉就行(见下面的实验)。
💡 动手实验 1:按
Win+R输入cmd,依次敲这三条命令看结果并对比:
nslookup learn.myxbw.cn—— 看到的是 CNAME 后面的真实 IP(Vercel 节点)nslookup -type=CNAME learn.myxbw.cn—— 直接看 CNAME 本身指向哪里ipconfig /flushdns—— 清空你电脑上的 DNS 缓存,再做实验 1 时结果才是最新的
四、在阿里云云解析里加一条记录
假设你新写了一个站,想让它住在 abc.myxbw.cn。操作路径是:阿里云控制台 → 域名 → 找到 myxbw.cn → 解析设置 → 添加记录。填四个字段:
| 字段 | 填什么 | 说明 |
|---|---|---|
| 记录类型 | CNAME | 因为托管方只给你一个域名入口,不给固定 IP |
| 主机记录 | abc | 只填子域部分,不要填完整域名,也不用加点 |
| 记录值 | cname.vercel-dns.com | 托管方(Vercel)给你的目标,末尾通常不加点 |
| TTL | 600(10 分钟) | 调试期可以设成 60,稳定后调大 |
填完保存,去托管方的域名管理里点"添加域名",它会告诉你"请把 abc.myxbw.cn CNAME 到 cname.vercel-dns.com"——和你刚填的一致,就对了。
顺序很重要:先在托管方添加域名 → 拿到它要求的目标 → 再去 DNS 加记录。反过来做,托管方会一直显示"域名未验证"。
五、HTTPS 证书是怎么来的
你从没买过证书,为什么 https://learn.myxbw.cn 上有小锁?因为托管方用 Let's Encrypt 这类免费 CA 帮你自动签的。流程大致是:
text
1. 你在 Vercel 添加域名,Vercel 要求你把它 CNAME 到 cname.vercel-dns.com
2. DNS 生效后,Vercel 向 Let's Encrypt 申请 learn.myxbw.cn 的证书
3. Let's Encrypt 通过 ACME 协议验证"你确实控制着这个域名"
4. 签发证书,Vercel 把它装到边缘节点上,之后浏览器握手时出示
5. 证书有效期 90 天,Vercel 在到期前自动续期,你不用做任何事这解释了那句"为什么要 CNAME 到托管方":证书是托管方替你申请的,只有你的流量真的经过它,它才能证明域名归你管、也才能持续替你续期。如果 DNS 还指着别处,验证就无从谈起,页面只会给你一个"证书无效"的红色警告。
证书里包含:签发给谁(域名)、由谁签发(CA)、有效期——你点地址栏的小锁就能逐项看到。
💡 动手实验 2:在
cmd里敲curl -vI https://learn.myxbw.cn/ 2>&1 | findstr /i "subject issuer expire SSL",你能在输出里看到证书的签发对象和签发机构。再打开浏览器访问一次本站,点地址栏左侧的小锁 → "连接是安全的" → 查看证书,对照一下命令行看到的信息。
六、静态站上线的三种常见方式
| 方式 | 怎么做 | 优点 | 代价 |
|---|---|---|---|
| 导入 Git 仓库(Vercel/Netlify) | 授权后选仓库,填构建命令和输出目录 | 一推代码就自动部署,有预览环境、免费 HTTPS、CDN | 依赖托管平台,国内访问慢 |
| CLI 部署 | 本地 vercel(或 netlify deploy)命令直接上传产物 | 不接仓库也能发,适合临时原型 | 每次都要手动执行,没有自动化的历史记录 |
| 自建服务器 Nginx | 租一台服务器,把构建产物传上去,用 Nginx 提供静态文件 | 完全可控,能配任意逻辑 | 服务器、证书、防火墙、备份全靠自己维护 |
你的两个站都走在第一条路上,这也是对新手最省事的组合:Git 仓库是唯一的事实来源,托管平台负责构建、分发和证书。
七、Vercel 的构建流程
托管平台怎么知道该跑什么命令、该发布哪个目录?答案在你的 vercel.json 里:
json
{
"buildCommand": "npm run docs:build",
"outputDirectory": "docs/.vitepress/dist",
"cleanUrls": true
}buildCommand:云端要执行的构建命令。npm run docs:build实际上就是跑 VitePress 的打包,把docs/里的 Markdown 编译成静态 HTML。outputDirectory:构建产物放在哪。平台只把这个目录里的文件当成网站内容发布出去,其余文件(源码、node_modules)不会出现在线上。cleanUrls:让/stage1/how-web-works这样的干净地址可用,不要末尾的.html。
这也解释了一个高价值细节:VitePress 的一条死链会让整个构建失败,线上就不会更新。站内链接写错一个路径,部署就会挂——所以链接纪律不是洁癖,是构建要求。
自动部署 vs 手动部署
| 方式 | 触发方式 | 什么时候用 |
|---|---|---|
| Git 自动部署 | git push 到主分支,平台自动构建上线 | 日常写作、长期维护(你的方式) |
| CLI 手动部署 | 本地 vercel --prod | 想立刻上线、或还没接仓库时 |
自动部署还会给每个 Pull Request 生成一个预览地址(形如 项目名-git-分支名.vercel.app),改动先在预览里看效果,满意了再合并到主分支——这是"写文章不炸线上"的标准做法。
八、五个最常见的坑
1. DNS 没生效。 三种可能:记录还没保存;TTL 还没过期(ipconfig /flushdns 试试);主机记录填错了(填了 learn.myxbw.cn 而规则只认 learn)。
2. 证书没签发。 通常是 DNS 没生效就去添加域名了。回 Vercel 的 Domains 页面看状态:Invalid Configuration 就是 DNS 还不对,等生效后证书会自动补签。
3. www 与根域不一致。 myxbw.cn 和 www.myxbw.cn 是两条独立记录。你给根域配了 A 记录指向 76.76.21.21,两者都能打开,但它们各自的状态码要和托管方保持一致(你的站走 308 跳转),否则会出现"一个能开一个 404"的怪事。
4. 缓存。 两层:DNS 缓存(等 TTL + flushdns)和浏览器缓存(Ctrl+F5 强制刷新)。改完没变化,先怀疑它们,别怀疑人生。
5. 国内访问 *.vercel.app 被污染。 裸的 xxx.vercel.app 域名在国内经常解析异常或超时,绑上自己的域名(learn.myxbw.cn)就正常——因为选择权回到了你自己的 DNS 手里。这也是你一开始就该把自定义域名配好的原因。
💡 动手实验 3:打开浏览器访问
https://vercel.com/dashboard,进入本站项目 → Settings → Domains,看learn.myxbw.cn的状态;再去阿里云云解析控制台,找到myxbw.cn,把learn和www那两条记录的类型、记录值、TTL 抄下来。两侧对上了,说明你已经读懂了自己的部署链路。
小结
text
域名从右往左:顶级域 .cn → 二级域 myxbw(要买)→ 子域 learn(免费,想加就加)
记录类型:A=指 IP,CNAME=指别名,MX=邮件,TXT=验证,NS=权威服务器
买域名 → 在权威 DNS(阿里云)加记录 → 解析生效(等 TTL)
→ 托管方验证域名 → 自动签发 Let's Encrypt 证书(90 天,自动续期)
→ Git 推送触发构建(buildCommand → outputDirectory)→ 发布到全球 CDN排查口诀:先 nslookup 看解析,再看证书状态,最后才怀疑代码。 这三步能解决 90% 的"网站打不开"。
下一课开始进入第二阶段,打开网页看内部结构——先认识 HTML 骨架,见第二阶段总览。想回头复习报文结构,去《HTTP 请求与响应》。
📎 本课对应知识库阅读:《知识库里的网站部署与域名解析主题文章》——重点看 DNS 记录与证书那两节,和你自己的
myxbw.cn配置逐条对照。