DNS 配置错误该怎么修复 网站无法访问排查技巧

网站突然打不开,很多人第一反应是服务器挂了,冲到云控制台重启一遍,结果还是打不开。其实相当一部分 “网站挂了” 的锅,根本不在服务器上,而是出在 DNS 这一层。域名解析这东西平时安安静静不出声,一旦出问题,表现又跟服务器故障很像,都是浏览器报错、页面转圈。所以排查的第一步,是把 DNS 问题和服务器问题拆开来看。先做一个最简单的判断:用 IP 直接访问。如果你记得服务器的公网 IP,直接在浏览器地址栏里输入 http://你的IP,能打开页面,说明服务器和网站程序都活着,问题九成出在 DNS 解析上。打不开的话,再去查服务器的 Web 服务有没有跑起来。这个分叉判断花不了十秒钟,但能省掉大量瞎折腾的时间。确认是 DNS 的问题之后,别急着去改解析记录。先搞清楚是解析记录本身错了,还是解析记录没错但各地 DNS 服务器没刷新。这两件事的处理方式完全不同。打开命令行,敲 nslookup 你的域名,默认会返回一个结果。如果返回的是 *** Can't find 你的域名: No answer 或者 NXDOMAIN,说明解析记录可能压根没生效,或者记录值填错了。如果返回的是一个 IP,但你看着眼生,那可能是解析到了旧服务器的 IP 上。再敲 nslookup 你的域名 8.8.8.8,指定用 Google 的公共 DNS 来查,如果这个返回的结果跟默认查询不一样,说明你本地 ISP 的 DNS 还有缓存没刷新。查 A 记录用 nslookup -type=a 你的域名,查 MX 记录用 nslookup -type=mx 你的域名。如果你的网站用的是 CNAME 指向 CDN 或者云服务商提供的域名,那 A 记录查出来可能是空的,得用 nslookup -type=cname 你的域名 来看。不同类型的记录查法不一样,别用一种命令查所有东西。解析记录填错的情况里,最常见的几个坑。一个是主机记录写错了,把 www 写成了 www. 或者 wwww,多一个点或者多一个字母都解析不了。另一个是记录值末尾多打了空格,复制 IP 或者域名的时候特别容易带进去,肉眼看不出来但系统就是不认。还有一种是 A 记录填成了内网 IP,比如 192.168 开头的地址,这种只有你自己局域网里能访问,公网用户解析到这个地址肯定打不开。CNAME 冲突是另一个高发问题。如果你的域名上有一条主机记录为 @ 的 CNAME,同时又想配 MX 记录用来收邮件,这两条记录不能共存于同一个主机名。很多域名服务商的后台不会主动提示这个冲突,你自己也不容易发现。解决办法是把 @ 上的 CNAME 换成 A 记录,如果网站用了 CDN,让 CDN 那边给你一个固定的回源 IP 来配 A 记录。还有一种情况是解析记录全对,但域名本身的 DNS 服务器地址出了问题。域名的 NS 记录决定了谁来负责解析你的域名,如果 NS 指向的 DNS 服务器已经停用或者被人改掉了,你后面配的所有解析记录都不会生效。登录域名注册商的控制台,找到域名管理里的 DNS 服务器设置,确认 NS 地址跟你的 DNS 服务商提供的一致。有些域名早年注册的时候默认用注册商自己的 DNS,后来换了云服务商但 NS 没跟着改,解析就一直在老地方打转。本地缓存的处理很简单,Windows 上 ipconfig /flushdns,Mac 上 sudo killall -HUP mDNSResponder,Linux 看具体发行版,systemd-resolved 用 sudo systemctl restart systemd-resolved,dnsmasq 用 sudo systemctl restart dnsmasq。清完缓存之后浏览器最好也开个无痕窗口,避免浏览器自己的 DNS 缓存还在捣乱。但你能清掉的只有自己电脑上的缓存,ISP 和公共 DNS 的缓存你控制不了,只能等 TTL 过期。TTL 这个值决定了各地 DNS 缓存多久刷新一次。如果你之前把 TTL 设成了 86400 秒,也就是一天,那改完解析之后最长要等一天才能全球生效。这也是为什么改解析之前建议先把 TTL 调短,比如改成 600 秒,等十分钟让它生效,然后再改记录,这样新记录传播得快很多。很多人改解析的时候不调 TTL,改完发现半天不生效,又反复去改记录,结果每次改动都重置计时器,越搞越慢。用 ping 或者 tracert 也能辅助判断。ping 你的域名 如果返回的 IP 跟你预期的一致,说明解析在你这台机器上已经生效了。tracert 你的域名 可以看到请求经过了哪些路由节点,如果走到某个节点之后开始超时,问题可能不在 DNS 而在于中间的网络链路。telnet 你的域名 80 或者 telnet 你的域名 443 可以测端口通不通,通的话会显示一个空白页面或者连接成功的提示,不通的话会报 Connection refused 或者一直卡住。这个命令在 Windows 上默认没装,得先去 “启用或关闭 Windows 功能” 里把 Telnet 客户端勾上。浏览器报错信息本身也有参考价值。DNS_PROBE_FINISHED_NXDOMAIN 说明域名不存在或者解析记录没生效。DNS_PROBE_FINISHED_NO_INTERNET 通常是本地网络的问题,跟域名解析关系不大。ERR_NAME_NOT_RESOLVED 也是解析失败的意思,但可能跟 DNS 服务器不可达有关。ERR_CONNECTION_TIMED_OUT 和 ERR_CONNECTION_REFUSED 更偏向服务器端或者网络链路的问题,解析本身可能已经成功了。看懂这些报错的差别,能帮你少走很多弯路。如果你用的是 CDN,情况会多一层。域名解析到 CDN 的 CNAME 地址,CDN 再回源到你的服务器。这种架构下网站打不开,可能是 CDN 节点的问题,也可能是回源出了问题。判断方法是用 curl -I 你的域名 看返回的 HTTP 头,如果里面有 CDN 服务商的标识头,说明请求到了 CDN,问题在回源或者 CDN 配置上。如果连 CDN 的标识都没有,那还是 DNS 解析层面的问题。CDN 控制台里一般都有 “诊断” 或者 “探测” 工具,能直接告诉你回源是否正常。域名过期这件事也得提一句。域名到期之后进入赎回期,解析会立即失效,网站打不开。很多人以为是服务器问题,查了半天才发现域名忘了续费。登录域名注册商后台看一眼到期时间,这个动作花不了半分钟,但能排除掉一个很致命的可能性。改完解析记录之后,验证的顺序应该是这样:先在本机 nslookup 确认解析返回了正确的 IP,再用 ping 确认能通,然后 telnet 测端口,最后浏览器无痕模式访问。每一步都确认通过了再往下走,哪一步卡住了问题就锁定在哪一层。最忌讳的是改完记录直接刷新浏览器,打不开就继续改记录,这样既找不到根因,还可能把本来对的配置改乱了。如果所有排查都做了还是不行,可以把 nslookup 的完整输出、ping 的结果、tracert 的路径、浏览器报错的截图整理到一起,提交给域名服务商或者云服务商的技术支持。带着这些信息去问,比光说 “我的网站打不开了” 要高效得多,对方也能更快定位到是解析同步的问题还是他们那边的 DNS 集群出了状况。

DNS 配置错误该怎么修复 网站无法访问排查技巧
免责声明:本文提供的方法与建议仅供技术参考,实际部署效果受机房环境、运营商线路、系统配置等多重因素影响。请在专业人员指导下操作,因自行操作导致的业务损失本站不承担责任。

相关推荐