本文约 3,907 字,预计阅读 10 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:服务器明明开着,网站就是打不开
刚买完服务器、装好宝塔面板、WordPress 也跑起来了,浏览器输入域名却显示”无法访问此网站”。Ping 一下 IP 通,直接访问 IP 也能打开页面,唯独域名不行。这种”服务器正常但域名不通”的情况,绝大多数出在 DNS 解析环节——要么 NS 没改成域名注册商那边的解析服务商,要么 A 记录填的是内网 IP,要么主机记录写成了完整域名导致实际生效的是 www.mimangfei.com.mimangfei.com。
更隐蔽的一类是”半通”:网站能访问,但邮件收不到(MX 没配)、SSL 证书签发失败(TXT 验证记录没生效)、CDN 回源 502(CNAME 指向错误)。DNS 是整站最底层的一环,配错了一条,症状会伪装成各种上层故障。
原理分析:解析是一条从上到下的查询链
DNS 的本质是”把名字翻译成地址”的分布式数据库。一次完整的解析过程是这样的:
- 浏览器查本地缓存与 hosts 文件;
- 向本地 DNS(Local DNS,通常是运营商或 223.5.5.5 / 119.29.29.29 / 8.8.8.8)发起递归查询;
- 本地 DNS 从根服务器开始,依次问
.com顶级域服务器、再问你的权威 DNS 服务器(由 NS 记录指定); - 权威 DNS 返回具体记录,本地 DNS 缓存后返回给浏览器。
关键点:修改解析记录是在权威 DNS 上改,全网生效需要等各级缓存过期,这个时间由记录的 TTL(Time To Live,单位秒)决定。 所以”改了没生效”通常不是没改成功,而是你本地的 DNS 缓存还没过期。
各类记录的作用:
| 记录类型 | 作用 | 典型值示例 | 常见错误 |
|---|---|---|---|
| A | 域名 → IPv4 地址 | mimangfei.com → 1.2.3.4 |
填成内网 IP 或 CDN 的临时 IP |
| AAAA | 域名 → IPv6 地址 | mimangfei.com → 2400:xxxx::1 |
服务器没配 IPv6 却加了记录 |
| CNAME | 域名 → 另一个域名 | www → mimangfei.cdn.dnsv1.com |
给根域名配置 CNAME(违反标准) |
| MX | 邮件服务器指向 | 10 mx1.qiye.aliyun.com |
优先级数字填反、与 A 记录冲突 |
| TXT | 任意文本,用于验证 | v=spf1 include:...、google-site-verification=... |
引号被一起复制进去 |
| NS | 指定权威 DNS 服务器 | dns1.hichina.com |
只改了一侧的 NS |
| CAA | 限制可签发证书的 CA | 0 issue "letsencrypt.org" |
限制了别的 CA 导致证书签发失败 |
两条硬规则必须记住:
规则一:根域名(@)不能用 CNAME。 RFC 1034 规定,如果一个节点存在 CNAME 记录,就不能再有其他任何记录。根域名必须同时有 NS 和 SOA 记录,所以给它加 CNAME 会导致冲突。DNSPod、阿里云等国内服务商提供的 “ALIAS” 或 “CNAME 扁平化” 是私有扩展,能用但不通用。
规则二:CNAME 和 MX 不能共存于同一主机名。 同理。所以配企业邮箱时,要给邮箱单独用子域名或者把根域的 CDN CNAME 换成 A 记录指向 IP。
保姆级实操:一套标准的解析配置
步骤 1:确认并修改 NS 到你的解析服务商。 域名注册商和解析服务商可以不是一家。常见组合是”阿里云注册 + DNSPod 解析”或”Namesilo 注册 + Cloudflare 解析”。在注册商后台把 NS 改成解析商提供的地址,生效需要 24–48 小时。
# 确认当前生效的权威 DNS 是不是你想要的
dig mimangfei.com NS +short
# 返回 dns1.hichina.com / dns2.hichina.com 说明还在万网
# 返回 xxx.ns.cloudflare.com 说明已切到 Cloudflare
步骤 2:添加根域名与 www 的 A 记录。 主机记录填 @ 表示根域名,填 www 表示 www 子域。记录值填服务器的公网 IP。TTL 初次配置建议 600 秒,稳定后改 3600 秒。
步骤 3:按需添加 CDN 的 CNAME。 使用又拍云、腾讯云 CDN、Cloudflare 时,控制台会给你一个 CNAME 地址,把 www 指向它即可,根域名用 ALIAS 或服务商提供的方案。
步骤 4:配置 MX 记录用于企业邮箱。 优先级数字越小优先级越高。以阿里企业邮箱为例:
# 主机记录 记录类型 优先级 记录值
@ MX 5 mx1.qiye.aliyun.com
@ MX 10 mx2.qiye.aliyun.com
@ TXT v=spf1 include:spf.qiye.aliyun.com -all
步骤 5:添加验证类 TXT 记录。 Google Search Console、百度站长平台、SSL 证书签发(DNS-01 验证)都需要 TXT。复制记录值时不要带上首尾的双引号,控制台里通常只需要填引号内的内容。
步骤 6:验证是否全网生效。 不要只在本机测,用多个公共 DNS 交叉验证:
# 三大公共 DNS 交叉验证
dig @223.5.5.5 mimangfei.com A +short # 阿里
dig @119.29.29.29 mimangfei.com A +short # 腾讯 DNSPod
dig @8.8.8.8 mimangfei.com A +short # Google
# 看权威服务器返回的 TTL 与完整应答,确认改的是权威侧
dig mimangfei.com A +noall +answer
# 从根服务器一路追踪,定位是哪一级卡住
dig mimangfei.com A +trace
# 一次性查多条记录类型
dig mimangfei.com MX +short
dig mimangfei.com TXT +short
# Windows 下用 nslookup 指定记录类型
nslookup -type=MX mimangfei.com
nslookup -type=TXT mimangfei.com
步骤 7:清理本地缓存后再测。 改完解析后如果本机还是旧结果,先清缓存:
# Windows 刷新 DNS 缓存
ipconfig /flushdns
# Linux(systemd-resolved)
sudo systemd-resolve --flush-caches
# macOS
sudo dscacheutil -flushcache && sudo killall -HUP mDNSResponder
常见踩坑
- 主机记录填了完整域名。 在主机记录里填
mimangfei.com,实际生成的是mimangfei.com.mimangfei.com。根域名一律填@(部分服务商填@或留空)。 - A 记录填成了内网 IP。 阿里云 ECS 控制台会同时显示公网卡和私网 IP,填了
172.x/10.x段的外网永远访问不到。 - MX 优先级数字理解反了。 5 比 10 优先,很多人以为 10 更大所以更优先。
- 加了 CAA 记录后证书签不下来。 CAA 记录写了
0 issue "digicert.com",再用 Let’s Encrypt 签发就会失败,报错类似CAA record does not match issuer。 - TTL 设成 86400 后临时改 IP,半天不生效。 迁移服务器前的正确做法是:提前 24–48 小时把 TTL 降到 300–600,迁完再调回去。
- SPF 记录重复。 一条域名有多个 TXT SPF 记录会导致邮件被判为垃圾,
v=spf1开头的记录全站只能有一条。 - 案例:一次 CDN 回源 502。 客户的 www 记录指向了 CDN 的 CNAME,但源站 IP 变更时他只改了根域名的 A 记录,忘了 CDN 控制台里的回源地址。结果表现为”部分地区 502、部分地区正常”,排查了两天才发现 CDN 回源到老 IP,而老 IP 已被回收分配给别人。教训:用了 CDN 之后,源站 IP 变更要同时改 CDN 回源配置,且不要只看一处解析结果,要用
dig分别查权威 DNS 和 CDN 返回的 IP 是否一致。
总结
DNS 排查的核心思路是”先确认改对了权威,再确认缓存已过期”。按顺序执行:dig NS 确认权威服务商 → dig @公共DNS 交叉验证 → +trace 定位卡点 → 清本地缓存复测。配置时守住两条硬规则(根域不用 CNAME、CNAME 与 MX 不共存),就能避开 80% 的坑。解析正常之后,下一步是给站点加上 HTTPS,也就是 SSL 证书申请与部署 要做的事;而如果你的服务器还没定,可以先看 服务器选型指南 再回来配 A 记录。记住一点:改解析前把现有记录整屏截图存档,误删之后没有回收站。
