欢迎光临
我们一直在努力

网站迁移前如何测试新服务器

网站搬到新服务器后,很多人会先修改域名解析,再打开浏览器检查是否正常。

如果这时才发现证书不匹配、网站跳转错误,或者后台无法连接数据库,就可能影响正在访问网站的用户。

实际上,即使公共DNS仍然指向旧服务器,也可以提前使用原来的域名测试新服务器。

本文介绍一种实用方法:通过 curl --resolve 指定连接的新IP,同时保留网站域名,检查HTTPS证书、页面响应和跳转情况。

1. 为什么不能只打开新服务器IP?

一台服务器可能同时运行多个网站,Web服务需要根据请求中的域名选择站点。

对于HTTPS网站,还涉及TLS握手中的SNI和证书域名校验。

因此,直接访问:

https://新服务器IP/

可能打开默认站点,也可能出现证书不匹配,不能据此判断原来的域名站点是否配置正确。

即使手动添加HTTP的 Host 请求头,也不能完整替代HTTPS中的域名信息。curl会根据URL中的主机名设置SNI。

使用 --resolve,可以让curl连接指定IP,同时继续按URL中的域名发送SNI并验证证书。

它只改变本次命令的连接目标,不会修改公共DNS记录。

2. 准备域名、新IP和curl

开始前,需要确认:

  • 新服务器已经部署网站,并配置实际使用的域名。
  • 新服务器已经配置与域名匹配的HTTPS证书。
  • 测试电脑能够连接新服务器的HTTPS端口。
  • 已经知道新服务器的实际IP。

本文使用以下示例:

项目示例值
网站域名www.example.com
新服务器IPv4地址203.0.113.10
HTTPS端口443

示例域名和IP必须替换成自己的实际信息。

建议从自己的电脑,或另一台能够访问新服务器的机器发起测试。只在新服务器上测试本机,不能完整验证外部访问路径。

在Linux终端检查curl:

curl --version

Debian或Ubuntu尚未安装时,可以执行:

sudo apt-get update
sudo apt-get install -y curl ca-certificates

如果新服务器还没有配置HTTPS,可以先参考本站:

如何在Linux云服务器上配置HTTPS?

迁移到莱卡云Linux云服务器时,也可以先完成网站部署和指定IP测试,再安排正式切换。

查看官网购买链接: https://www.lcayun.com

9折优惠码:bloglcayun

3. 指定新IP测试HTTPS网站

下面的多行命令适用于Linux、macOS或WSL中的Bash终端。

先设置实际域名和新IP,后续命令在同一个终端执行:

domain='www.example.com'
new_ip='203.0.113.10'

然后发送请求:

curl -q --noproxy '*' \
  --resolve "${domain}:443:${new_ip}" \
  --connect-timeout 5 \
  --max-time 20 \
  -sS -D - -o /dev/null \
  -w '\nConnected IP: %{remote_ip}\nHTTP: %{http_code}\n' \
  "https://${domain}/"

这条命令会实际请求网站首页,显示响应头、连接IP和HTTP状态码,页面正文则被丢弃。

主要参数的作用如下:

参数作用
-q放在第一个参数位置,避免读取默认curl配置文件
--noproxy '*'本次请求不经过curl配置或环境变量指定的代理
--resolve为指定的域名和端口提供连接IP
--connect-timeout 5连接建立阶段最多等待5秒
--max-time 20整个请求最多运行20秒
-D -将响应头显示在终端
-o /dev/null丢弃下载的正文
-w请求结束后输出连接信息

--resolve 的格式是:

域名:端口:IP

其中端口必须与请求URL对应。HTTPS默认使用443;如果实际网站使用8443,就需要同时修改映射中的端口和URL中的端口。

该参数按域名与端口匹配,也可以在一条命令中提供多项映射。

Windows PowerShell怎么执行?

可以使用下面的单行命令,替换其中的域名和IP:

curl.exe -q --noproxy "*" --resolve "www.example.com:443:203.0.113.10" --connect-timeout 5 --max-time 20 -sS -D - -o NUL -w "\nConnected IP: %{remote_ip}\nHTTP: %{http_code}\n" "https://www.example.com/"

这里明确使用 curl.exe,避免与部分PowerShell版本中的同名别名混淆。

4. 返回结果怎么看?

首先检查:

Connected IP

它应当是本次指定的新服务器IP。

然后检查HTTP状态码、响应头和curl是否报告错误。-w 输出的信息来自实际传输,可用来辅助判断请求连接到了哪里。

结果通常说明什么下一步
HTTP 200请求获得正常响应继续核对页面内容
HTTP 301、302网站要求跳转查看 Location
HTTP 401、403需要认证或访问被拒绝检查登录要求和访问规则
HTTP 404请求资源未找到检查站点匹配、目录和路径
HTTP 502网关或代理未得到正常上游响应检查后端程序与连接
curl错误 7未能连接目标主机或端口检查服务监听、地址和网络
curl错误 28某个阶段达到超时时间结合错误文字判断连接还是响应超时
curl错误 60服务器证书校验失败检查证书域名、有效期、证书链和信任

curl的退出状态和HTTP状态码不是同一件事。 默认情况下,收到404等HTTP响应,curl也可能正常完成传输并返回退出码0。

如果输出HTTP 000,表示没有取得有效的HTTP响应状态码,应先查看curl同时报告的错误。

证书报错后,要不要加-k?

不要把添加 -k 后能够访问,当成HTTPS已经配置正确。

-k 会跳过服务器证书校验,而网站迁移前恰恰需要确认这部分是否正常。

curl默认会检查证书信任和URL中的域名。若使用内部CA,应通过可信来源取得对应CA证书,并使用 --cacert 等方式建立正确的信任关系。

如果源站使用只供CDN回源验证的证书,普通客户端直接访问时可能不信任它,需要按实际证书体系判断。

证书部署与返回结果不一致时,可以继续参考本站:

SSL证书更新后仍显示旧证书怎么办?Nginx与CDN排查教程

5. 遇到301或302跳转怎么处理?

第3节的命令没有添加 -L,因此不会自动跟随跳转。

这样可以先看清响应头里的:

Location

例如网站可能将:

https://example.com/

跳转到:

https://www.example.com/

这两个是不同的主机名。只给其中一个配置 --resolve,并不会自动覆盖另一个。

如果直接加 -L 跟随,后续请求就可能按正常解析结果访问旧服务器,造成“新服务器已经测试通过”的误判。

确认跳转域名符合预期后,可以为两个域名分别指定映射:

root_domain='example.com'

curl -q --noproxy '*' \
  --resolve "${root_domain}:443:${new_ip}" \
  --resolve "${domain}:443:${new_ip}" \
  --connect-timeout 5 \
  --max-time 20 \
  -L --max-redirs 5 \
  -sS -D - -o /dev/null \
  -w '\nFinal URL: %{url_effective}\nFinal IP: %{remote_ip}\nHTTP: %{http_code}\n' \
  "https://${root_domain}/"

其中 root_domain 也需要替换成实际裸域名,domain 沿用前面设置的带www域名。

-L 用于跟随跳转,--max-redirs 5 限制最多跟随5次。

如果实际跳转涉及其他域名或不同端口,需要分别确认对应目标。

上面的 Final IP 显示最终连接的信息,不能代替对中间每一步跳转的检查。需要进一步排查时,可以增加 -v 查看连接过程。

6. 对比当前入口与新服务器

在同一个测试环境中,去掉 --resolve,可以查看域名按当前解析配置访问时的结果:

curl -q --noproxy '*' \
  --connect-timeout 5 \
  --max-time 20 \
  -sS -D - -o /dev/null \
  -w '\nConnected IP: %{remote_ip}\nHTTP: %{http_code}\n' \
  "https://${domain}/"

再与第3节指定新IP的结果比较。

对比结果判断方向
当前入口正常,新IP失败优先检查新服务器部署、证书和访问规则
两边都正常,但连接IP不同可能符合迁移前的预期,还需核对内容和数据
新IP正常,当前入口异常检查当前入口对应的旧服务器、CDN或解析配置
两边都异常分别记录错误,检查公共依赖和测试网络

如果域名接入了CDN,普通访问连接到的可能是CDN节点,而不是旧服务器本身。

指定源站IP测试成功,只能说明这条直连路径通过了相应检查,不能证明CDN缓存、回源规则和边缘证书也已正常。

如果源站原本只允许CDN节点访问,测试电脑直连被拒绝也可能是预期行为。应按既有访问策略安排测试,不要为了测试关闭整套防护。

7. 返回200以后,还需要检查什么?

HTTP返回200,不代表网站迁移已经全部完成。

还应检查页面内容、关键接口和实际业务数据。

例如,可以把首页正文保存下来:

curl -q --noproxy '*' \
  --resolve "${domain}:443:${new_ip}" \
  --connect-timeout 5 \
  --max-time 20 \
  -sS -o migration-test-page.html \
  "https://${domain}/"

确认命令成功后,再查看保存的内容是否属于正确的网站,避免实际返回的是默认页面或应用错误提示。

此外还应验证:

  • 关键栏目和页面能否打开。
  • 图片、CSS和JavaScript资源是否使用正确地址。
  • 应用能否连接预期的数据库。
  • 后台登录、文件上传等必要功能是否正常。
  • 域名和HTTPS跳转是否符合预期。

curl不会执行网页中的JavaScript,也不会自动加载页面引用的全部资源,完整功能仍需要浏览器或应用测试配合。

在测试环境中验证写入功能时,应使用测试账号和测试数据,避免误触发正式订单、邮件或其他业务操作。

如果新服务器返回502,可以参考本站:

Nginx出现502 Bad Gateway怎么办?常见原因与排查教程

正式切换时,数据库增量同步、写入切换和定时任务等工作也要单独安排。修改解析后,还应检查A、AAAA记录或CDN回源设置是否与迁移方案一致。

8. 结语

网站迁移前,可以通过 curl --resolve 指定新服务器IP,在保留原域名和HTTPS证书校验的情况下,提前检查新环境。

测试时重点确认连接IP、证书、HTTP状态和跳转目标,再继续验证页面内容与业务功能。

先把新环境检查清楚,再安排解析或回源切换,能减少网站正式迁移后的故障排查时间。

赞(0)
未经允许不得转载:莱卡云 » 网站迁移前如何测试新服务器