公众号旧文

域名挂了之后,如何把网站迁移到新域名?

作者:胖子阅读 —

之前胖子写过一篇:为什么我 注册域名 一分钱都不用花(2)

里面向大家推荐了免费的二级域名,胖子自己也在用。

结果前两天突然就 NXDOMAIN 了:

图片

但服务器还在,数据还在,域名只是入口,我完全可以换一个入口,让站点立刻复活。

这篇文章,就借此机会,讲清楚:

当域名挂掉后,如何快速给网站更换新域名,并恢复访问。

一、核心思路:域名只是入口

先把一个关键认知讲清楚,网站访问链路是这样的:

域名 → DNS解析 → IP → Nginx → 应用程序

所以域名挂了,服务器还在,应用也还在跑。

那就只需要做一件事:换新的域名,把它重新指向这台服务器。

二、第一步:准备一个新域名

你需要搞一个新域名,添加解析记录:

A     → 你的服务器 IPv4
AAAA  → 你的服务器 IPv6(如果有)

验证解析是否成功:

getent hosts yourdomain.com
curl ifconfig.me

如果返回的 IP 和你服务器一致,说明 DNS 没问题。

三、第二步:修改 Nginx,让新域名接管站点

假设你原来的网站是跑在本机 5001 端口:

直接写一个新的 Nginx 配置:

server {
    listen 80;
    listen [::]:80;
    server_name yourdomain.com;
    location / {
        proxy_pass http://127.0.0.1:5001;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

然后执行:

nginx -t
systemctl reload nginx

测试:

curl -I http://yourdomain.com

如果返回 200 或 301,说明新域名已经接管成功。

四、第三步:一定要签新的 HTTPS 证书

这是最容易踩坑的一步。

证书是绑定域名的,不能复用旧域名的证书。

必须重新申请:

certbot --nginx -d yourdomain.com

成功后验证:

curl -I https://yourdomain.com

五、第四步:修改站内所有旧域名引用

这一点非常关键。

直接全局搜索:

grep -Rni "旧域名.com" /var/www/home/opt 2>/dev/null

重点检查:

  • .env
  • config.js / config.py
  • index.html
  • API 地址
  • 跳转逻辑(redirect)

替换成新域名:

sed -i 's/旧域名.com/新域名.com/g' 文件

六、验证是否真的迁移成功

需要确认这几件事:

# HTTP 是否跳 HTTPS
curl -I http://yourdomain.com

# HTTPS 是否正常
curl -I https://yourdomain.com

# 本机后端是否正常
curl -I http://127.0.0.1:5001

理想结果:

  • HTTP → 301 → HTTPS
  • HTTPS → 200 OK

七、清理旧域名

如果确定不再使用旧域名,可以清理证书:

certbot delete --cert-name olddomain.com

不会影响新域名。

八、迁移其实就 4 步

整个过程可以压缩成:

换 DNS → 改 Nginx → 签证书 → 替换代码中的旧域名

真正难的不是操作,而是排错。

尤其是这三个坑:

  1. 忘了签新证书
  2. 后端写死跳转
  3. Nginx 默认规则抢请求

域名只是入口,服务器才是本体,只要你服务器还在:

  • 换 1 个域名可以恢复
  • 换 10 个域名也可以恢复

甚至同时让多个域名指向同一个站点,这样哪怕其中的某个域名挂了,也可以通过其他域名继续访问网站。