双十一凌晨把静态站迁到新服务器,顺手记下这七个坑
2026 年 11 月 11 日零点,我把跑了 14 个月的静态站从旧 VPS 挪到新机器,全程用 rsync 加 systemd 重写服务单元,没动一行业务代码。迁移前先在新机跑了一遍 nginx -t 和证书续期 dry-run,结果卡在 TLS 1.2 的 OCSP 装订上:旧机靠 cron 手动 stapling,新机没配 resolver,浏览器首屏多等了一个往返。第二个坑是 301 规则,旧机把 /posts 全量跳转到带斜杠路径,新机复制配置后忘了同步 try_files,首页索引直接 404。第三个坑在 rsync:加了 --delete 却没排除 .well-known,acme 验证目录被清空,凌晨一点半重新签发证书。剩下四个坑分别是日志轮转权限、防火墙放行 80 端口顺序、systemd 的 RestartSec 设得太短导致重启风暴、以及旧机没关停造成双写。凌晨三点全部收尾,TTFB 从 480ms 降到 210ms,次日抓取日志里 200 状态码占比回到 99.2%。结论:迁移前先在新机完整跑一遍证书与路由,比事后回滚省事得多。
2026 年 11 月 11 日零点,我把跑了 14 个月的静态站从旧 VPS 挪到新机器,全程用 rsync 加 systemd 重写服务单元,没动一行业务代码。迁移前先在新机跑了一遍 nginx -t 和证书续期 dry-run,结果卡在 TLS 1.2 的 OCSP 装订上:旧机靠 cron 手动 stapling,新机没配 resolver,浏览器首屏多等了一个往返。第二个坑是 301 规则,旧机把 /posts 全量跳转到带斜杠路径,新机复制配置后忘了同步 try_files,首页索引直接 404。第三个坑在 rsync:加了 --delete 却没排除 .well-known,acme 验证目录被清空,凌晨一点半重新签发证书。剩下四个坑分别是日志轮转权限、防火墙放行 80 端口顺序、systemd 的 RestartSec 设得太短导致重启风暴、以及旧机没关停造成双写。凌晨三点全部收尾,TTFB 从 480ms 降到 210ms,次日抓取日志里 200 状态码占比回到 99.2%。结论:迁移前先在新机完整跑一遍证书与路由,比事后回滚省事得多。