最近我的一台VPS的IP更换了,我把我操作过程的经验总结给大家分享一下。DNS切换的本质问题不是"怎么改记录",而是全球DNS缓存的传播延迟。改了A记录之后,不同地区的用户解析到新IP的时间取决于他们本地、运营商、上游DNS服务器各自缓存的TTL值。如果现有TTL是3600秒(1小时),你现在改记录,部分用户可能要等1小时后才能访问新服务器。
第一步:提前24小时降低TTL
这是整个流程最关键的准备动作,很多人因为跳过这步,切换后等了好几个小时网站才完全恢复。
登录你的DNS服务商(Cloudflare、阿里云DNSPod、Spaceship等),找到域名的A记录,把TTL从默认的3600或86400改为300秒(5分钟)。
等待一个当前TTL周期让这个设置在全球传播,之后所有新的DNS查询就会以5分钟为缓存周期。这意味着正式切换后,最多5分钟内全球大多数地区就能解析到新IP。
如果来不及提前降TTL,切换后的等待时间就取决于原始TTL值,可能是1小时甚至更长。
第二步:在新VPS上完整部署和测试
切换DNS之前,新服务器必须独立可用。把网站程序、数据库、SSL证书、Nginx/Apache配置全部迁移到新机器,确保新服务器能独立正常运行。
数据库迁移:
# 旧服务器导出
mysqldump -u root -p 数据库名 > backup.sql
# 传输到新服务器
scp backup.sql user@新服务器IP:/root/
# 新服务器导入
mysql -u root -p 数据库名 < /root/backup.sql
第三步:本地hosts绑定测试新服务器
正式切换之前,用hosts文件强制让自己的电脑解析到新IP,验证新服务器是否完全正常,这样外部用户完全感知不到你在测试。
Windows系统编辑C:\Windows\System32\drivers\etc\hosts,Mac/Linux编辑/etc/hosts:
新服务器IP yourdomain.com
新服务器IP www.yourdomain.com
保存后打开浏览器访问域名,确认网站显示正常、SSL证书有效、所有功能可用。测试完之后删掉这两行hosts记录。
第四步:正式切换A记录
测试确认没问题后,在DNS服务商把A记录的IP从旧值改为新服务器IP,保存。
如果使用Cloudflare的橙云代理模式,切换几乎即时生效,还能在切换期间通过CDN缓存保持网站可访问。建议同时开启"Always Online"功能,当源站短暂不可用时Cloudflare会提供缓存版本。
第五步:验证DNS传播状态
切换后用这几个工具确认不同地区的解析情况:
命令行查询:
nslookup yourdomain.com
# 或者
dig yourdomain.com +short
全球传播检测:访问whatsmydns.net或dnschecker.org,输入你的域名,可以看到全球各地节点的当前解析结果。绿色代表已经解析到新IP,红色或黄色代表还在用旧IP或尚未更新。
第六步:旧服务器保留48小时
这是最常被忽视的步骤。改完DNS之后立刻关掉旧服务器是很常见的错误,会导致还在解析旧IP的用户无法访问。
正确做法是旧服务器继续运行至少1到2天,等全球DNS传播完成、没有用户流量再打向旧IP之后,再关闭。
可以通过查看旧服务器的访问日志判断是否还有流量:
tail -f /var/log/nginx/access.log
如果日志里完全没有新请求,说明DNS传播已经完成,可以安全关闭旧服务器了。
动态网站的额外注意事项
如果是电商站、有用户注册登录、或者有表单提交,切换期间可能存在数据写入到不同数据库的风险。处理方式:切换DNS前把网站设置为维护模式,冻结新数据写入约10到15分钟,等DNS切换完成并确认新服务器接收流量之后再恢复正常。
WordPress用户可以用WP Maintenance Mode插件快速开关维护页面。
完整操作时间表
| 时间节点 | 操作 |
|---|---|
| 切换前24小时 | 把TTL降到300秒 |
| 切换当天 | 完成新VPS部署和数据迁移 |
| 切换前1小时 | hosts绑定测试新服务器 |
| 切换时 | 修改A记录到新IP |
| 切换后即时 | whatsmydns.net验证传播状态 |
| 切换后48小时 | 观察旧服务器流量,确认后关机 |
按这个流程操作,TTL提前降好的情况下,大多数网站可以在5到30分钟内完成切换,用户感知到的停机时间接近于零。