机器买好了,域名也注册了,接下来就是把两者接起来 —— 在浏览器输入 example.com,能打开你 VPS 上的网站。
这一步卡住的人比想象中多。常见症状是:记录加了但打不开、www 能访问根域名不行、改完等了两小时还是旧的、或者浏览器一直提示证书错误。绝大多数都不是服务器的问题,而是 DNS 这一层某个环节没对上。
这篇把流程完整走一遍:DNS 到底怎么工作、各种记录类型该怎么填、TTL 怎么设、Cloudflare 那朵云开还是关、以及生效慢的时候该怎么确认问题在哪。
很多人卡住是因为把这两层混在一起了。
第一层:域名用谁的 DNS 服务器(NS 记录)
你在哪买的域名(注册商),和谁来解析这个域名(DNS 服务商),是两件独立的事。注册商默认提供 DNS 服务,但你可以换成别家 —— 换的方式就是改 NS 记录。
第二层:在这个 DNS 服务商里加解析记录(A、CNAME 等)
这才是"把域名指向 IP"的地方。
搞不清自己在哪一层,就会出现这种情况:在注册商后台加了 A 记录,但域名的 NS 早就改成了 Cloudflare —— 注册商那边的记录完全不生效,因为全世界的 DNS 查询都去问 Cloudflare 了。
先确认当前用的是谁的 NS:
dig NS example.com +short
# 或 Windows
nslookup -type=NS example.com
返回的就是实际生效的 DNS 服务商。记录要加在这里,不是别处。
| 类型 | 填什么 | 用来做什么 |
|---|---|---|
| A | IPv4 地址 | 把域名指向服务器(最常用) |
| AAAA | IPv6 地址 | IPv6 访问 |
| CNAME | 另一个域名 | 让 www 跟着根域名走 |
| TXT | 一段文本 | 域名所有权验证、SPF、DKIM |
| MX | 邮件服务器域名 | 收邮件 |
| NS | DNS 服务器域名 | 委派解析权 |
| CAA | 证书颁发机构 | 限制谁能给你签证书 |
建站只需要前四种。MX 只在你要收邮件时配,NS 只在换 DNS 服务商时改。
CAA 有个坑值得单独提:如果你配了 CAA 记录但没包含 letsencrypt.org,certbot 申请证书会直接失败,报错信息还不太直白。没配过 CAA 就不用管;配过的话检查一下:
dig CAA example.com +short
这是绝大多数人要的。假设 VPS 的 IP 是 203.0.113.10:
| 类型 | 名称 | 值 | TTL |
|---|---|---|---|
| A | @ | 203.0.113.10 | 300 |
| CNAME | www | example.com | 300 |
@ 代表根域名本身(也就是 example.com)。不同服务商的写法不一样:有的填 @,有的留空,有的要填完整域名。填错的表现就是"www 能访问,主域名不行"。
www 用 CNAME 指向根域名,好处是以后换 IP 只改一处。也可以两条都用 A 记录指向同一个 IP,效果一样,就是换 IP 要改两次。
有 IPv6 的话再加一条:
| 类型 | 名称 | 值 |
|---|---|---|
| AAAA | @ | 2001:db8::1 |
服务器侧的 IPv6 怎么开见 IPv6 VPS 配置指南。
一台 VPS 上跑好几个服务时,用子域名区分最省事:
| 类型 | 名称 | 值 | 指向 |
|---|---|---|---|
| A | @ | 203.0.113.10 | 主站 |
| A | blog | 203.0.113.10 | 博客 |
| A | api | 203.0.113.10 | 后端接口 |
| A | git | 203.0.113.10 | Gitea |
注意:几个子域名指向同一个 IP 是完全正常的。 到了服务器上,由 Nginx 或 Caddy 按 Host 头把请求分给不同的应用 —— DNS 只负责"找到这台机器",分流是服务器的事。具体怎么分见 一台 VPS 部署多个网站。
嫌一条条加麻烦,可以用通配符:
| 类型 | 名称 | 值 |
|---|---|---|
| A | * | 203.0.113.10 |
所有子域名都指向这台机器。方便,但代价是别人能用任意子域名访问你的服务器,所以服务器上必须配兜底规则(没匹配到的域名直接拒绝),否则会命中第一个站点配置。
网站在自己的 VPS 上,邮件用第三方服务(腾讯企业邮、Zoho、Google Workspace 之类)—— 这是很常见也很推荐的组合,自建邮件服务器的送达率维护成本太高。
| 类型 | 名称 | 值 | 说明 |
|---|---|---|---|
| A | @ | 203.0.113.10 | 网站在 VPS |
| MX | @ | 邮件服务商给的地址 | 收邮件 |
| TXT | @ | v=spf1 include:... ~all | SPF |
MX 和 A 记录互不冲突 —— 一个管邮件,一个管网站,可以同时存在。
要自建邮件服务器的话,SPF、DKIM、DMARC、PTR 一整套都得配对,否则发出去的信全进垃圾箱,见 自建邮箱发信进垃圾箱怎么办。
TTL(Time To Live)是"这条记录可以被缓存多久",单位是秒。
| 场景 | 建议 TTL | 原因 |
|---|---|---|
| 刚配置、还在调试 | 60-300 | 改错了能快速生效 |
| 准备换 IP / 迁移服务器 | 提前 24 小时降到 60-300 | 切换时才能快速切过去 |
| 配置稳定了 | 3600-86400 | 减少 DNS 查询,略微降低延迟 |
迁移服务器时那条最关键。 如果 TTL 是 86400(一天),你改了 IP,全球缓存要一整天才会全部更新 —— 这一天里部分用户访问老 IP,部分访问新 IP。正确做法是迁移前一天先把 TTL 降下来,等旧 TTL 过期后再改 IP。
改 TTL 本身也要等旧 TTL 过期才生效,所以必须提前。
用 Cloudflare 的话,每条 A/AAAA/CNAME 记录旁边有个云朵图标,这个开关影响很大。
| 橙色云(Proxied) | 灰色云(DNS only) | |
|---|---|---|
| 解析结果 | Cloudflare 的 anycast IP | 你的真实服务器 IP |
| 源站 IP | 隐藏 | 公开暴露 |
| CDN 缓存 | 有 | 无 |
| DDoS 防护 | 有 | 无 |
| WAF、缓存规则 | 可用 | 不可用 |
| TTL | 固定 300 秒,不可改 | 可自定义 |
几条实际规则:
- 只有 A、AAAA、CNAME 能被代理。 MX、TXT 这些永远是 DNS only —— 想给 MX 开橙云是做不到的。
- 同名的多条 A 记录,只要有一条开了代理,全部按代理处理。 CNAME 链上任意一环开了代理,整条链都走代理。
- 开了代理,TTL 就锁定在 300 秒(Auto),改不了。
- 通过 Dashboard 添加域名时,代理默认是开的。
开橙云之后要注意两件事,不然容易踩坑:
第一,服务器上必须能正确识别 HTTPS。 Nginx 里要传 X-Forwarded-Proto $scheme,否则程序以为是 HTTP 就跳转到 HTTPS,Cloudflare 再转成 HTTP 传回来,来回死循环。成因见 HTTPS 跳转循环怎么办。
第二,源站还是要装证书。 Cloudflare 的 SSL 模式如果设成 Full/Strict,它会用 HTTPS 回源 —— 源站没证书就是 521/522。排查见 Cloudflare 521 / 522 怎么办。
什么时候该用灰色云:
- 域名所有权验证的 TXT 记录(本来就不能代理)
- SSH、数据库、游戏服务器这类非 HTTP 服务 —— 代理只处理 HTTP/HTTPS 流量,开了橙云 SSH 就连不上了
- 需要 certbot 走 HTTP-01 验证签证书的时候(临时关掉更省事)
想彻底不暴露源站 IP 又不想用标准代理,可以走 Cloudflare Tunnel —— 连端口都不用开。Cloudflare 的基础设置见 Cloudflare CDN 加速设置。
别用浏览器验证。浏览器有自己的 DNS 缓存,还有系统缓存、路由器缓存,你看到的可能是十分钟前的结果。用命令行:
# 看当前解析到哪个 IP
dig A example.com +short
# 指定用 Cloudflare 的公共 DNS 查(绕开本地缓存)
dig @1.1.1.1 A example.com +short
# 看完整过程,包括 TTL 剩余秒数
dig A example.com
# Windows
nslookup example.com 1.1.1.1
dig 的输出里,ANSWER SECTION 那行的数字就是 TTL 剩余时间。它在倒数,归零后缓存才会去重新查询 —— 这解释了"为什么我改了但还是旧的"。
验证顺序建议这样走:
dig @1.1.1.1 example.com—— 权威 DNS 是否已更新dig example.com—— 你本地是否还在用缓存curl -I http://203.0.113.10—— 直接用 IP 访问,确认服务器在正常工作curl -I http://example.com—— 通过域名访问
第 3 步很关键:如果用 IP 都打不开,问题在服务器(防火墙、Nginx、应用没起来),跟 DNS 一点关系都没有。这一步能帮你省下大量在 DNS 上瞎找的时间,服务器侧排查见 VPS 服务启动了但外网访问不了。
本地缓存清理:
# Windows
ipconfig /flushdns
# macOS
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
# Linux(systemd-resolved)
sudo resolvectl flush-caches
| 操作 | 通常生效时间 |
|---|---|
| 新加 A / CNAME 记录 | 几秒到几分钟 |
| 修改已有记录 | 等原 TTL 过期 |
| 换 NS(换 DNS 服务商) | 2-48 小时 |
| 新注册的域名首次解析 | 最长 24 小时 |
改 NS 是唯一真的要等很久的操作,因为它涉及顶级域名服务器的更新。其他情况下"等了很久还没生效",基本都是别的原因:
- 记录加在了错的地方(NS 已经改了,但记录加在注册商那边)
@的写法不对,实际加成了example.com.example.com- 本地缓存没清
- 域名因为未实名认证被暂停解析(
.cn域名常见)
记录加了,但域名打不开
按顺序查:
dig NS example.com +short # 1. NS 对不对
dig @1.1.1.1 A example.com +short # 2. 权威 DNS 有没有你的记录
curl -I http://你的IP # 3. 服务器本身通不通
三步走完就知道问题在哪一层了。
www 能访问,主域名打不开
根域名的记录没加对。检查 @ 那条 A 记录,注意不同服务商对"根域名"的写法要求不同 —— 有的填 @,有的留空。填了完整的 example.com 的话,有些服务商会拼接成 example.com.example.com。
主域名能访问,www 打不开
少了 www 那条记录。CNAME 指向根域名,或者再加一条 A 记录指向同一 IP。
解析对了,但 HTTPS 提示证书错误
DNS 没问题,是证书的事。证书要覆盖你实际访问的域名 —— 只给 example.com 签了证书,访问 www.example.com 就会报错。签发时把两个都带上:
sudo certbot --nginx -d example.com -d www.example.com
证书问题见 Let's Encrypt 证书续期失败怎么办。
certbot 签证书失败,提示验证不通过
HTTP-01 验证要求 80 端口能被 Let's Encrypt 访问到。三个常见原因:域名还没解析到这台机器、80 端口被防火墙挡了、或者 Cloudflare 橙云开着(把验证请求拦在了外面)。临时把橙云切成灰色,签完再切回去,或者改用 DNS-01 验证。
国内访问慢,国外正常
不是 DNS 问题。可能是线路问题、被墙、或者 Cloudflare 的国内节点绕路。IP 是否被封的判断见 VPS 被墙了怎么办。
服务器自己 ping 不通外网域名
这是服务器出站 DNS 的问题,和你的域名解析是两码事 —— 看 VPS DNS 解析失败怎么办。
DNS 只是把用户带到你的机器门口,门里的事还得配:
- 反向代理和 HTTPS —— 用 Caddy(自动签证书,两行配置)或 Nginx + certbot。不想写配置就用图形界面的 Nginx Proxy Manager。
- 安全加固 —— 域名一解析,扫描器几小时内就会找上门。SSH 密钥、防火墙、Fail2Ban 见 VPS 安全加固指南。
- 防刷 —— 站点公开之后爬虫和 CC 都会来,见 VPS 网站被 CC 攻击怎么办。
用国内服务器(阿里云、腾讯云的大陆机房)+ 域名对外提供服务,需要 ICP 备案,这是法规要求,不备案会被机房拦掉 80 端口。
用香港、日本、美国这些境外机房不需要备案,域名直接解析就能用 —— 这也是很多人选境外 VPS 的原因之一。具体边界和注意事项见 VPS 需要备案吗。
注意区分:备案针对的是服务器所在地,不是域名注册地。 在国外注册的域名解析到国内机房,同样要备案。
域名和 VPS 必须在同一家买吗?
不用,完全无关。域名在 Namecheap 买、机器在别家用,加条 A 记录就行。
一个域名能指向多台 VPS 吗?
能。加多条同名 A 记录,DNS 会轮询返回(DNS 轮询)。但它不是负载均衡 —— 某台机器挂了,DNS 照样会把用户往那台送,因为 DNS 不做健康检查。真要高可用得用别的方案。
换 VPS 了要怎么改?
把 A 记录的 IP 改成新机器的就行。记得提前一天把 TTL 降到 300,否则切换期间用户会分散在两台机器上。
免费的 DNS 服务够用吗?
够。Cloudflare 免费套餐对个人站和小项目完全够用,解析速度还比多数注册商自带的 DNS 快。
买了域名要多久能用?
注册完通常几分钟内就能加解析记录,最长等 24 小时。如果是 .cn 这类需要实名认证的域名,认证通过前解析不会生效。
子域名需要单独买吗?
不用。blog.example.com、api.example.com 都是你域名的一部分,随便加,不额外花钱。
- VPS 用 Caddy 反向代理完全指南 — 解析好了,接下来配 HTTPS
- 一台 VPS 部署多个网站 — 多个域名指向同一台机器后怎么分流
- VPS 安全加固指南 — 域名一公开就会被扫
- VPS 需要备案吗 — 国内机房和境外机房的区别
- VPS 服务启动了但外网访问不了 — 用 IP 都打不开的情况
