修改域名解析之后经常碰到这样的状况,电脑访问网站依旧加载旧页面,甚至打不开,但切换手机流量访问就正常。并不是解析没有生效,而是本地缓存还没有过期。域名解析生效的整个过程,本质就是和各级缓存做博弈。
你在DNS服务商后台修改A记录,更换新旧IP,这条变更会立刻同步到权威DNS服务器。也就是说,直接查询权威DNS获取域名IP,会马上返回新地址。绝大多数普通用户不会直接请求权威DNS,访问时请求的是运营商递归DNS或者公共DNS,比如8.8.8.8、114.114.114.114。递归DNS之前查询过这个域名,保存了旧IP缓存,缓存到期之前,持续向用户返回旧IP。缓存保留时长由TTL决定。

TTL全称Time To Live,翻译为生存时间,计量单位是秒。新增解析记录的时候会看到TTL选项,常见默认值600秒也就是十分钟,也有3600秒或者86400秒的配置。这个数值代表递归DNS拿到解析记录之后,可以缓存的时长。TTL没有到期,用户查询域名,递归DNS直接读取本地缓存,不再访问权威DNS。所以修改解析,全球范围全部生效的时间上限基本等于TTL。TTL设置600秒,理论上最多十分钟所有递归DNS就会拉取新记录;TTL设置86400秒,就要等待一整天。
实际场景比这套理想模型复杂。部分运营商本地DNS不会严格遵守TTL规则,缓存保留时间更长,小型运营商或者部分地区节点尤为突出。TTL设置十分钟,实际缓存可能留存半小时甚至更久,这类情况无法人为干预,只能等待。另外本地设备自身也存在缓存,电脑操作系统、浏览器、路由器都会缓存DNS信息。Windows系统打开命令行,执行ipconfig /flushdns刷新;Mac系统运行sudo dscacheutil -flushcache;Chrome浏览器访问chrome://net-internals/#dns,点击Clear host cache。清理完本地缓存,再次访问域名,获取新IP的概率会提升。
如果修改的是NS记录,也就是把域名DNS服务器切换到其他服务商,生效周期会大幅拉长。NS记录变更需要在注册局层面更新,顶级域名服务器重新指向新DNS服务器,这条链路缓存TTL通常更长,24到48小时都属于正常范围。更换DNS服务商不要期待几分钟完成全网切换,提前预留等待时间。
新注册域名首次配置解析属于另一种情况,没有任何递归DNS存有缓存。配置好A记录,用户发起查询,递归DNS本地无缓存,直接请求权威DNS,拿到新IP返回。新域名首次解析一般速度很快,几分钟就能访问。但权威DNS同步延迟,或是NS记录尚未生效,依旧会出现访问失败。新域名配置解析完成,先在权威DNS核验记录是否存在,再使用公共DNS查询,确认返回IP是否正确。
想要判断解析是否生效,有几种检测手段。Windows系统使用nslookup,Mac、Linux使用dig,指定查询8.8.8.8或者114.114.114.114,核对返回IP是否是新设置地址。查询权威DNS返回新IP,公共DNS返回旧IP,说明缓存未到期,等待即可。指定查询本地运营商DNS返回旧IP,8.8.8.8返回新IP,代表运营商本地缓存顽固。也可以借助在线工具,DNS Checker、站长工具DNS查询,一次性查看多地区节点解析结果,直观看到哪些区域依旧读取旧IP。
想要加快解析生效速度,有一个实用操作。正式修改解析之前,先缩短TTL。计划次日下午迁移服务器,上午就将现有A记录TTL从3600调整为60,等待原有TTL过期,第二天下午修改IP。递归DNS最多只缓存一分钟旧记录,修改IP之后,短时间内全网获取新地址。迁移完成确认业务稳定,再把TTL调回3600或者更长数值。迁移前执行这个操作,能够减少长时间等待。
TTL并不是越小越好。设置60秒,递归DNS每分钟都会向权威DNS发起查询,查询量显著上涨。域名访问量大,权威DNS负载会升高,部分免费DNS服务商还会限制查询频次。稳定运行阶段,TTL设置在300至3600秒区间比较合适。Cloudflare免费版自动TTL为300秒,阿里云默认600秒,默认参数对大部分场景足够。CDN场景TTL一般设置较短,CDN节点需要快速感知源站变更,但这套调度逻辑和普通网站解析不一样。
有几类特殊场景单独说明。启用CDN的域名,解析返回IP是CDN节点地址,不是源站IP。修改CDN配置,生效时间取决于CDN厂商调度系统,可能几分钟,也可能数小时,和TTL关联不大。智能DNS会针对不同地区返回不同IP,修改单条线路记录,仅该线路用户受影响,其他地区用户感知不到变化。还有一种情况,在域名注册商修改DNS服务器,但新DNS服务商没有提前录入解析记录,用户访问直接解析失败。切换流程一定要先在新DNS配置好解析记录,再修改NS。
域名解析生效时间没有固定数值,受TTL、各级DNS缓存策略、本地设备缓存,以及修改记录类型(A记录或NS记录)共同影响。理清这条链路,修改解析之后就不会反复刷新页面干等。等待一段时间,或者清理本地缓存,多数情况十分钟左右就能看到更新。超过TTL数倍依旧没有生效,再排查权威DNS是否更新,或是NS记录配置错误。