改了 DNS 记录,却还有人看到旧的?了解 TTL 和解析器缓存如何造成"生效延迟",以及如何在全球范围内检查。
你把域名指向了新服务器,可一半的用户仍然访问到旧服务器。这种延迟就是常说的 DNS 生效(传播)。其实并没有什么东西在"传播"——旧的解析结果还保存在世界各地的缓存里,等待过期。
当有人访问你的域名时,他的设备会询问一个递归解析器(运营商的,或者 1.1.1.1、8.8.8.8 这样的公共 DNS)。解析器向你的权威域名服务器查询一次,然后在记录的 TTL(生存时间)允许的时间内缓存这个结果。在 TTL 过期之前,所有使用该解析器的人得到的都是旧的缓存结果。
所以一次修改的最长延迟大约等于该记录原来的 TTL。TTL 为 86400 秒的记录可能需要一天才能全部更新;TTL 为 300 的记录大约只需五分钟。
更换域名使用的 NS 服务器(在注册商处)会涉及顶级域服务器,而这些 NS 记录的 TTL 通常是一到两天。请预留最多 48 小时。
DNS 查询会同时从多个国家的解析器查询你的记录,让你看到哪些地点已经返回新值、哪些仍在返回旧值。你可以查询 A、AAAA、CNAME、MX、TXT、NS、SOA 和 PTR 记录,也可以指定特定的解析器。
修改后通常需要检查:
你的电脑和浏览器也会缓存 DNS。清除缓存(Windows 用 ipconfig /flushdns,大多数 Linux 用 sudo resolvectl flush-caches,macOS 用 sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder),或换一个解析器测试。然后用网站检测确认网站本身已经由新服务器响应。