域名解析生效要多久?为什么有时候改了半天还没变

在域名管理后台改了解析记录,然后刷新页面……还是没变。等了一个小时再看,还是没变。这是很多人都遇到过的情况,有时候真的很让人抓狂。

要搞懂为什么,需要先理解DNS解析这件事是怎么运作的。

DNS解析的基本流程

你访问一个网址,浏览器要知道这个域名对应哪个IP地址。这个查询过程大概是这样的:

  1. 浏览器先查本地缓存——如果最近查询过,直接用缓存结果
  2. 本地缓存没有,去问你的DNS服务器(一般是路由器或者运营商的DNS)
  3. DNS服务器也有缓存——如果缓存里有,直接返回
  4. 缓存没有,才去权威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调小,能省不少麻烦。