打开命令行,名解敲下 `nslookup blog.example.com`,析查询返回的名解 IP 地址不一定来自你解析记录里写的那台服务器。二级域名解析这件事,析查询表面看只是名解加一条 A 记录,实际暗坑不少。析查询
先厘清一个基本事实:所谓二级域名,名解是析查询相对顶级域和主域而言的。比如 example.com 是名解主域,blog.example.com 就是析查询它的二级域名。但真正决定这个二级域名指向哪里的名解,不是析查询主域的 NS 记录,而是名解你为它单独配置的解析记录。很多人以为主域解析对了,析查询二级域名自然生效,名解这个假设不成立。两者在 DNS 体系里是独立条目,主域的 A 记录不会自动继承给子域。
我见过一个典型场景。某团队把主域指向了 CDN 的 CNAME,然后新建了 api.example.com 想直连后端服务器。结果上线后所有 API 请求都打到了 CDN 节点上,返回 404。原因很简单:他们在 DNS 服务商的控制台里,给 api 子域添加的是一条 A 记录,但忘了 CDN 那边默认对泛解析(*.example.com)也做了接管。泛解析的优先级低于精确记录,可他们那条 A 记录写错了 IP,精确记录反而把流量引到了错误的地方。这种问题用 `dig api.example.com +trace` 一路追踪,才能看清每一跳的委派关系。
查询二级域名解析,工具选择有讲究。Windows 下 `nslookup` 够用,但它默认走系统 DNS,缓存干扰大。`dig` 更干净,加 `@8.8.8.8` 指定公共 DNS 能绕过本地缓存。Mac 和 Linux 用户直接用 `dig` 或 `host` 就行。想查全球各地的解析结果是否一致,可以用 whatsmydns.net 这类在线工具,它从多个节点发起查询,能暴露地域性解析差异。有一次我帮人排查,国内解析正常,海外用户却打不开,一查发现是 DNS 服务商没做海外线路,二级域名的 A 记录只在国内节点生效。
TTL 值是个容易被忽略的细节。默认 600 秒意味着你改了记录,最长要等 10 分钟才全网生效。调试阶段把 TTL 调到 60 秒甚至 30 秒,能省很多等待时间。但别长期设太低,否则 DNS 查询量暴增,解析服务商可能限流。我自己的做法是:上线前一周调低 TTL,稳定运行三天后再改回 3600。
CNAME 和 A 记录的选择也常让人纠结。二级域名想指向另一个域名,用 CNAME;想直接指向 IP,用 A 记录。但注意,CNAME 不能和 MX、TXT 等其他记录共存于同一子域。如果你给 mail.example.com 配了 MX 记录,就别再给它加 CNAME。这个限制来自 DNS 协议本身,不是服务商的 bug。
还有一种情况:二级域名解析正常,但浏览器打不开。这时候别死磕 DNS,先 `ping` 一下,再看端口通不通。DNS 只负责把域名翻译成 IP,后面的 TCP 握手、TLS 证书、HTTP 响应,它一概不管。我遇到过解析完全正确,但服务器防火墙没放行 443 端口的情况,查了半天 DNS 记录,纯属浪费时间。
最后说个实操建议。给二级域名做解析变更时,先在一台测试机上用 `dig` 确认新 IP 生效,再切正式流量。别一次性改完就拍屁股走人。DNS 这东西,改起来快,排查起来慢,谨慎点没坏处。