在域名管理后台改了解析记录,然后刷新页面……还是没变。等了一个小时再看,还是没变。这是很多人都遇到过的情况,有时候真的很让人抓狂。
要搞懂为什么,需要先理解DNS解析这件事是怎么运作的。
DNS解析的基本流程
你访问一个网址,浏览器要知道这个域名对应哪个IP地址。这个查询过程大概是这样的:
- 浏览器先查本地缓存——如果最近查询过,直接用缓存结果
- 本地缓存没有,去问你的DNS服务器(一般是路由器或者运营商的DNS)
- DNS服务器也有缓存——如果缓存里有,直接返回
- 缓存没有,才去权威DNS服务器查最新记录
这里面有几层缓存,每一层都有自己的有效时间(TTL,Time to Live)。你改了记录,并不是全球所有DNS服务器立刻就知道,而是要等各地的缓存陆续过期、重新查询,才能拿到新数据。
TTL是关键
TTL是域名解析记录里设置的缓存时间,单位是秒。比如TTL=3600,意思是这条记录可以被缓存1小时,1小时后才重新查询。
如果你改解析之前,TTL设置的是86400(24小时),那全球各地的DNS服务器最多可能要等24小时才会刷新。
所以如果你预计要改解析,提前把TTL调小是个好习惯。比如提前几个小时把TTL改成300(5分钟),等缓存过期后再改记录,这样新记录传播会快很多。
实际上要等多久
通常来说:
- TTL较小(300-600秒):大部分地区10-30分钟内生效
- TTL较大(3600秒以上):可能要等1-48小时
- 运营商DNS缓存:有些运营商DNS更新很慢,即使TTL过期了也可能延迟
所谓的”全球生效”,业内一般说的是48小时内,实际大部分情况下几个小时就差不多了。
怎么判断是否生效
不要只靠刷自己电脑的浏览器来判断,因为本地缓存可能影响结果。几个更可靠的方法:
命令行查询:
# Windows
nslookup 你的域名
# Mac/Linux
dig 你的域名
查询结果里的IP地址就是当前你这里解析到的结果。
在线工具:用 whatsmydns.net 可以看全球各地DNS服务器的解析结果,能直观看出哪些地方已经生效,哪些还没有。
清除本地DNS缓存:
# Windows
ipconfig /flushdns
# Mac
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
几个常见误区
改了记录就立刻生效:不是,要等缓存过期。
自己电脑能访问了就代表全球生效了:不是,本地缓存刷新不代表全球都更新了。
换了DNS服务商就能加速生效:DNS服务商影响的是权威记录的响应速度,各地缓存过期时间还是由TTL决定的。
耐心等待是最好的应对方式,关键操作提前把TTL调小,能省不少麻烦。