换机时「网站打不开」的原因,多半不是新机没配好,而是 DNS 还指着旧机,或者 TTL 太长,改完迟迟不生效。这篇把时间线讲清楚:什么时候改 TTL、什么时候切记录、切完怎么验、怎么留退路。

一、先理解 TTL 在做什么

TTL(Time To Live)是 DNS 记录的缓存时间,单位秒。RFC 1035 对它的定义是:资源记录可以被缓存多久,超过这个时间解析器要重新向权威服务器查询。

关键点:

  • TTL 决定的是别人缓存你记录的时间,不是你改记录的速度;
  • 你把 TTL 从 86400 改成 300,已经在缓存里的旧记录仍要等原来的 86400 秒过期;
  • 所以「降 TTL」必须提前做,而不是切换当天做。

二、时间线:提前 48 小时降 TTL

以一次计划内的迁移为例:

时间 动作
T-48h 把所有要迁移的记录 TTL 调到 300 秒(或 60 秒)
T-24h 确认新机服务、证书、数据都就绪,用 hosts 或临时域名验证
T-0 逐条切换 A/AAAA/CNAME 记录到新机
T+0~2h 观察新旧机日志、抽查访问
T+72h 确认稳定后,再考虑把 TTL 调回较长值

提前量取决于原来的 TTL。原来是 1 小时,提前 2 小时就够;原来是 24 小时,至少要提前 24 小时。

三、Cloudflare 的 TTL 限制

官方说明:

  • 代理记录(橙色云):TTL 固定为 Auto = 300 秒,不能编辑;
  • 仅 DNS 记录(灰色云):可以自定义 TTL,非 Enterprise 最低 60 秒,最长 1 天;
  • TTL 越长,记录变更生效越慢。

所以如果你开了代理,TTL 已经是 300 秒,不需要再调;要调的是灰色云的记录。

另外,官方提醒:即使 TTL 很短,你本地 DNS 缓存也可能让「实际感受到变化」的时间晚于 5 分钟。

四、迁移前先列全记录

只改主域名是最常见的漏项。迁移前把所有记录过一遍:

dig +short A example.com
dig +short AAAA example.com
dig +short MX example.com
dig +short TXT example.com
dig +short NS example.com

在 DNS 面板里逐条核对:

  • 主域 @、www;
  • 子域:api、static、img、blog 等;
  • 邮件相关:MX、SPF、DKIM、DMARC 的 TXT;
  • 验证类 TXT(搜索平台、支付、第三方服务);
  • 如果用了 CNAME 接入(如 CDN、对象存储),确认它指到哪。

把这些列成表,切换时一条一条勾,不要凭记忆。

五、切换当天的顺序

  1. 先切低风险子域(如 static),验证新机没问题;
  2. 再切主域和 www;
  3. 最后处理邮件相关记录(改错会影响收信);
  4. 每切一条,等 1–5 分钟就查一次:
dig +short A example.com @1.1.1.1
dig +short A example.com @8.8.8.8

两个公共解析器都指向新 IP,才说明权威记录已更新。

六、切换后验证

curl -I https://example.com
curl -I https://www.example.com

检查:

  • 返回 200/301,不是 502/523;
  • 证书域名正确、未过期;
  • 页面内容是新机版本(可以改一个临时标记确认);
  • 表单、登录、上传可用;
  • 新机访问日志有真实流量,旧机日志在下降。

如果用了 Cloudflare 代理,切换源站后要清一次缓存,否则边缘可能还返回旧内容。官方支持按 URL 或整站清除。

七、回滚预案

TTL 已经降到 300 秒,回滚成本很低:

  1. 把记录改回旧机 IP;
  2. 等 5 分钟左右;
  3. 用 dig 与 curl 确认流量回到旧机;
  4. 旧机服务保持运行,不要提前释放。

这就是「提前降 TTL」的真正价值:给自己留一条几分钟内能走通的退路。

八、常见坑

坑 后果 避免方式
切换当天才降 TTL 旧缓存未过期,改了也不生效 提前 48 小时
只改主域,漏了 www/子域 部分页面打不开 先列全记录
开了代理还去改 TTL 改不了,白折腾 橙色云固定 300 秒
切完不清缓存 页面还是旧内容 按 URL 或整站清缓存
证书续期在切换前做 HTTP-01 验证打到旧机,失败 切完再 certbot renew --dry-run
本地缓存当成「没生效」 误判回滚 用公共解析器直接查
邮件记录跟着一起改错 收不到验证码/邮件 邮件记录最后改,单独验证

九、验证清单

  1. 所有记录已列全并逐条勾选;
  2. TTL 提前降到位,且已过一个原 TTL 周期;
  3. 主域、www、关键子域都解析到新 IP;
  4. HTTPS 正常、证书正确;
  5. 页面内容为新版本;
  6. 邮件收发正常;
  7. 旧机保留且可随时切回;
  8. 稳定 72 小时后再恢复 TTL。

一句话总结

TTL 要提前降,记录要列全,切换要逐条,验证要用公共解析器,旧机要留着。 迁移的停机时间取决于准备,而不是切换那一下的手速。