网站迁移后仍访问旧服务器?DNS TTL、递归缓存与 Hosts 排查指南

网站迁移后仍出现新旧页面混用,通常不是单一的解析没生效。本文按权威 DNS、递归缓存、本机 Hosts、IPv6 记录、CDN 回源与源站响应逐层排查。

网站已经迁到新服务器,域名解析也改成了新 IP,但有些人看到的是新站,有些人仍然打开旧页面;自己用手机流量访问正常,办公室网络却一直不变。遇到这种情况,先不要反复修改 DNS 记录,也不要急着删除旧服务器。问题通常不在“解析有没有改”,而在于访问请求究竟经过了哪一层缓存,以及最终连接的是哪台源站。

下面按实际排查顺序处理:先确认旧内容来自哪里,再分别检查权威 DNS、公共递归 DNS、本机 Hosts、浏览器和 CDN 配置。

网站迁移后仍访问旧服务器?DNS TTL、递归缓存与 Hosts 排查指南

第一步:确认看到的真是旧服务器内容

页面内容没更新,不一定代表请求到了旧服务器。CDN 页面缓存、WordPress 缓存插件、反向代理缓存,甚至浏览器缓存,都可能继续返回旧页面。

最实用的方法是在新旧服务器上放置一个容易识别、但不会影响访客的标记。例如:

  • 在响应头增加 X-Origin: new-serverX-Origin: old-server
  • 在站点根目录放置内容不同的 /origin-check.txt
  • 检查两台服务器 Web 访问日志,看测试请求出现在哪一台机器上。

可以先查看响应头:

curl -I https://example.com/

如果站点接入了 CDN,响应头里看到的可能只是 CDN 节点信息。这时还要结合源站日志,不能只凭页面外观判断。

第二步:分别查询权威 DNS 和递归 DNS

DNS 查询至少要分成两层看。

权威 DNS 保存域名当前应当返回的记录;递归 DNS 则替用户查询并缓存结果。即使权威记录已经改成新 IP,某个递归解析器仍可能在 TTL 到期前返回旧 IP。

先找出域名使用的权威 DNS:

dig NS example.com +short

然后直接向其中一台权威服务器查询:

dig @ns1.example-dns.com example.com A
dig @ns1.example-dns.com www.example.com A

再查询常见公共递归 DNS:

dig @1.1.1.1 example.com A
dig @8.8.8.8 example.com A
dig @9.9.9.9 example.com A

Windows 没有安装 dig 时,可以用:

nslookup example.com 1.1.1.1
nslookup example.com 8.8.8.8

判断结果时重点看三件事:

  1. 权威 DNS 是否已经返回新 IP;
  2. 不同递归 DNS 返回的 IP 是否一致;
  3. 域名是否同时存在 AAAAACNAME,其中某条记录仍指向旧环境。

如果权威 DNS 仍返回旧 IP,问题在 DNS 配置或记录尚未保存成功;如果权威 DNS 返回新 IP,而部分递归 DNS 返回旧 IP,通常是在等待缓存过期。

第三步:正确理解 TTL,不要把它当作切换倒计时

TTL 表示解析结果可以被缓存多长时间,但它不是从你修改记录的那一刻统一开始倒计时。

假设旧记录的 TTL 是 3600 秒。某个递归 DNS 在修改前 5 分钟刚查询并缓存了旧 IP,那么它可能继续使用这条结果约 55 分钟;另一个解析器的缓存恰好到期,则可能立即获取新 IP。因此迁移后的短时间内,不同网络出现不同结果是可能的。

还要注意,迁移时真正影响等待时间的是“修改前旧记录的 TTL”。在切换后才把 TTL 从 3600 秒降到 300 秒,无法让已经存在的旧缓存立刻失效。

比较稳妥的做法是:

  • 计划迁移前 24 至 48 小时降低 TTL;
  • 切换后至少保留旧服务器一段时间;
  • 等主要地区和常用递归 DNS 都稳定返回新 IP,再恢复常规 TTL;
  • 不要仅凭自己电脑的一次查询就关停旧服务器。

如果必须紧急切换,可以尝试使用公共 DNS 提供商的缓存刷新工具,但它只能影响对应解析服务,不能清除所有运营商、本地路由器和企业 DNS 的缓存。

第四步:检查本机 Hosts 和本地 DNS 缓存

如果只有某一台电脑访问旧站,优先检查本机。

Windows 的 Hosts 文件通常位于:

C:\Windows\System32\drivers\etc\hosts

Linux 和 macOS 通常位于:

/etc/hosts

搜索域名是否被手动绑定到旧 IP。迁移测试时临时添加的 Hosts 记录很容易被忘记,而且它的优先级通常高于普通 DNS 查询。

Windows 可以清理本机 DNS 解析缓存:

ipconfig /flushdns

清理后重新打开浏览器再测试。若仍异常,还可以依次排查:

  • 浏览器自身的 DNS 或连接缓存;
  • 系统是否启用了代理软件、VPN 或安全 DNS;
  • 路由器是否缓存解析结果;
  • 公司网络是否使用内部 DNS;
  • 浏览器是否通过 HTTPS DNS 使用了与系统不同的解析器。

最简单的交叉验证方式,是在同一设备上分别使用家庭宽带、手机流量和另一家运营商网络访问。如果只有一个网络异常,问题大概率在该网络使用的递归 DNS 或代理链路。

第五步:别漏查 AAAA、CNAME 和 CDN 回源

迁移时只修改 A 记录还不够。以下几类配置经常导致“部分用户仍访问旧服务器”。

1. AAAA 记录仍指向旧服务器

支持 IPv6 的网络可能优先连接 AAAA 记录,而不支持 IPv6 的网络使用 A 记录。于是两类用户会到达不同服务器。

dig example.com A +short
dig example.com AAAA +short

如果新服务器尚未配置 IPv6,应删除或更新旧的 AAAA 记录,并确认站点、防火墙和证书均支持新的 IPv6 地址。

2. www 与根域名配置不一致

检查 example.comwww.example.com,不要默认两者会自动同步。有时根域名已经改到新 IP,而 wwwCNAME 仍指向旧的 CDN 域名。

3. CDN 的源站地址没有修改

开启代理或 CDN 后,公开 DNS 返回的是节点地址,不会直接显示源站 IP。此时要到 CDN 后台检查:

  • 当前回源主机名或回源 IP;
  • 是否存在多个源站和故障转移组;
  • 边缘缓存是否仍保存旧页面;
  • HTTPS 回源的 SNI、Host 请求头是否正确;
  • 是否有旧规则只对部分路径或地区生效。

如果 DNS 已正确指向 CDN,但 CDN 仍回源旧服务器,继续刷新本机 DNS 不会解决问题。

第六步:用 curl 直接测试新旧源站

curl --resolve 可以临时指定域名连接到某个 IP,同时保留正确的 Host 和 HTTPS SNI,适合绕过 DNS 直接检查源站:

curl -I --resolve example.com:443:203.0.113.20 https://example.com/
curl -I --resolve example.com:443:198.51.100.10 https://example.com/

第一条填新服务器 IP,第二条填旧服务器 IP。这样可以确认:

  • 新服务器是否已经部署完整内容;
  • HTTPS 证书和虚拟主机是否正常;
  • 新旧服务器返回的响应头是否能区分;
  • 问题究竟在 DNS/CDN 链路,还是新源站本身。

如果新 IP 直连正常,而域名访问仍到旧内容,就继续查 DNS、代理和 CDN;如果新 IP 直连也显示旧内容,则应检查新服务器上的站点目录、缓存插件、反向代理或数据库连接。

一套不容易出错的迁移顺序

正式迁移时,可以按下面的顺序执行:

  1. 提前降低旧 DNS 记录的 TTL;
  2. 在新服务器完成文件、数据库、证书和重定向测试;
  3. 给新旧源站增加可识别的响应标记;
  4. 切换 AAAAACNAME 及 CDN 回源配置;
  5. 从多个公共 DNS、地区和网络查询结果;
  6. 检查新服务器日志中的真实访问量是否持续增加;
  7. 继续保持旧服务器可用,并避免旧站产生新的写入;
  8. 确认主要流量全部进入新服务器后,再下线旧环境。

对于有订单、会员、评论或后台写入的网站,迁移窗口还要处理数据一致性。常见做法是临时维护、冻结旧站写入,或者在切换前执行最后一次数据库增量同步。否则即使 DNS 已完全生效,也可能出现部分订单留在旧数据库的问题。

排查结果如何快速归因

  • 权威 DNS 返回旧 IP:修改权威记录或检查是否改错 DNS 服务商;
  • 权威 DNS 返回新 IP,部分递归 DNS 返回旧 IP:等待 TTL 到期,并保留旧服务器;
  • DNS 全部返回新 IP,但页面仍旧:检查 CDN、页面缓存和新服务器内容;
  • 只有一台电脑异常:检查 Hosts、本机 DNS、浏览器、代理和 VPN;
  • 只有 IPv6 网络异常:检查 AAAA 记录和新服务器 IPv6 配置;
  • 只有部分路径异常:检查 CDN 缓存规则、反向代理和应用缓存;
  • 新旧服务器都收到写请求:立即处理数据同步,避免继续产生分叉数据。

网站迁移后的 DNS 问题,最怕靠“再等一会儿”来猜。把权威解析、递归缓存、本机解析、CDN 回源和源站响应逐层拆开,就能明确是哪一层仍保留旧地址,也能判断旧服务器什么时候可以真正释放。

参考资料

  • Cloudflare Docs:DNS records – TTL
  • Google for Developers:Flush Cache(Google Public DNS)
  • Microsoft Learn:ipconfig 命令说明

资料核验日期:2026年9月21日。

WordPress建站教程

WordPress 发送邮件失败怎么办?SMTP、SPF、DKIM、DMARC 与退信排查指南

2026-9-18 14:28:51

WordPress建站教程

WordPress 媒体库图片太多怎么清理?缩略图、未引用附件与备份检查指南

2026-9-21 16:24:09