DNS 传播与 TTL
你改了 DNS 记录,但网站还是打开旧的服务器。这不是 Bug,是 DNS 设计本身的机制——叫做 TTL。
TTL 是什么
TTL(Time To Live)是 DNS 记录的缓存有效期,单位是秒。
类型: A
名称: @
值: 104.21.3.5
TTL: 3600 ← 这条记录可以被缓存 3600 秒(1 小时)
含义:世界各地的 DNS 解析器拿到这条记录后,会缓存 1 小时。1 小时内即使你改了记录,他们也不会重新查。
DNS 传播的时间线
timeline
title DNS 记录修改后的传播过程
0秒 : 你在 Cloudflare 改了 A 记录
即时 : Cloudflare 的权威服务器立刻更新
5分钟 : 用相同 ISP 的人可能看到新记录(如果 TTL=300)
1小时 : 全球大部分解析器更新(如果 TTL=3600)
24-48小时 : 极少数使用旧缓存的解析器才完全更新
关键认知: - DNS 传播不是从你的服务器"推送"出去的 - 而是全球解析器各自按 TTL 时间刷新缓存 - 所以"传播时间"取决于各地解析器的 TTL 过期时间
TTL 设置策略
| 场景 | 建议 TTL | 原因 |
|---|---|---|
| 平时稳定运行 | 3600(1小时) | 减少 DNS 查询次数,缓解权威服务器压力 |
| 计划迁移(提前 24 小时) | 300(5分钟) | 切换后变更快速生效 |
| 迁移进行中 | 60(1分钟) | 出问题可以快速回滚 |
| 迁移完成稳定后 | 恢复 3600 | 减少查询开销 |
迁移前必做: 1. 提前 24 小时把 TTL 从 3600 改为 300 2. 等 24 小时让全球缓存失效 3. 再执行 DNS 切换 4. 切换完成验证无误后,TTL 恢复 3600
传播进度怎么查
几个免费工具可以看全球各地的解析结果:
| 工具 | 地址 | 特点 |
|---|---|---|
| DNS Checker | dnschecker.org | 多地域 A/CNAME/MX/TXT 查询 |
| WhatsMyDNS | whatsmydns.net | 可视化地图,直观 |
| MXToolbox | mxtoolbox.com | 专注邮件记录验证 |
| dig(命令行) | 系统内置 | 精确、可指定 DNS 服务器 |
用 dig 强制查权威服务器(不走缓存):
# 查询 example.com 的 A 记录,直接问 Google DNS
dig @8.8.8.8 example.com A
# 查询 MX 记录
dig @8.8.8.8 example.com MX
# 查询权威服务器(NS 记录)
dig example.com NS
为什么你的浏览器看到的不一样
你的 ISP 解析器缓存 vs 其他人的解析器缓存可能不同。
临时测试方法(Mac/Linux):
# 清除本地 DNS 缓存
sudo dscacheutil -flushcache && sudo killall -HUP mDNSResponder # Mac
sudo systemd-resolve --flush-caches # Linux (systemd)
# 使用不同 DNS 服务器测试
dig @1.1.1.1 example.com A # Cloudflare DNS
dig @8.8.8.8 example.com A # Google DNS
常见 TTL 值参考
| TTL 值 | 时间 | 适用场景 |
|---|---|---|
| 60 | 1 分钟 | 迁移进行中 |
| 300 | 5 分钟 | 迁移前预热 |
| 900 | 15 分钟 | 测试阶段 |
| 3600 | 1 小时 | 常规运营 |
| 86400 | 24 小时 | 极稳定的记录(如 NS 记录) |
本章执行清单
- [ ] 检查你的域名当前所有记录的 TTL 设置
- [ ] 如果近期有迁移计划,把 TTL 提前改到 300
- [ ] 在 dnschecker.org 确认你的 A 记录在全球主要地区均已生效
- [ ] 学会用
dig @8.8.8.8 yourdomain.com A排除本地缓存干扰
下一章:域名注册与管理——如何选域名,如何管理,如何避免常见陷阱。