px 断缘技术站 notes & experiments

老站不背锅:把 15 年前的纯静态老站平稳搬到新服务器

技术笔记 · 迁移与运维 · 约 600 字

手上有一批十几年的纯静态老站:页面是手写的 HTML,目录里还躺着早已失联的 Flash 文件和好几套不同年代叠加的 CSS。要把整站从一台老旧机器挪到新机器,真正会出事的从来不是「搬」这个动作,而是搬完之后才发现少了半张图,或者某个还在被搜索引擎收录的老链接点开是 404。

我的做法是按下面这个顺序来,每一步都能回退。

一、先只读备份,再动手

登录旧机器后第一件事不是改配置,而是把整站打包并生成校验文件。打包用 tar,校验用 sha256,传输带校验文件一起走:

tar czf site.tar.gz -C /var/www site
sha256sum site.tar.gz > site.tar.gz.sha256
scp site.tar.gz site.tar.gz.sha256 root@NEW_HOST:/root/

到了新机器先比对哈希,一致才解包。这一步的全部意义是:无论后面怎么折腾,手上永远留着一份「确定没被动过」的原件。

二、逐行校验数据,而不是只看文件个数

文件数量对得上,不代表内容对得上。我会对源和目标各跑一遍清单再比对,一条比结构,一条比内容:

find site -type f -printf '%P\n' | sort | sha256sum
find site -type f -exec sha256sum {} \; | sort -k2 | sha256sum

第一条比的是目录结构,第二条比的是每个文件的字节内容。两个哈希都一致,才算真的搬干净了。

三、旧链接一律用 301 接管

老站页面多是 .html 直出,搬到新架构后路径常常会变。凡是路径变过的,都用 301 指到新地址,不要用 302,更不要用 JS 跳转——搜索引擎只认 301 传递权重,JS 跳转在爬虫眼里约等于一张空页。规整的路径用一条 rewrite 规则批量处理,比手写几百行 location 靠谱得多。

四、上线后逐页点名复验

上线不等于完成。我会把全站 URL 列成清单,一条命令扫过去,只要不是 200 就立刻停下来查:

while read -r u; do
  code=$(curl -s -o /dev/null -w '%{http_code}' "$u")
  [ "$code" = "200" ] || echo "FAIL $code $u"
done < urls.txt

整个流程没有一步是聪明的,全是笨办法:先备份、再校验、旧链接用 301、最后逐页点名。老站搬迁最怕的就是想当然,把笨办法做全,反而最省事。

← 返回技术笔记列表 · 返回首页