阿里云 ECS职责分析与到期迁移指南

写于 2026-10-08

撰写日期:2026-10-08 对象:阿里云 ECS,公网 IP 47.113.x.x,Ubuntu,Nginx 1.24.0 配套文档:《20261008 liufeisheng.cn 通配符HTTPS证书自动续期部署记录.md》 说明:本文"已实测"部分为 2026-10-08 从公网真实探测所得;标注"需在 ECS 上核对"的部分是依据架构和会话记录推断,迁移前请登录 ECS 以实际配置文件为准。


一、一句话定位

这台 ECS 是 liufeisheng.cn 全站唯一的公网入口和"大门",但它不存任何业务数据。 它只做三件事:① Nginx 终止 HTTPS(TLS);② frps 接受群晖的内网穿透;③ acme.sh 自动申请和续期证书。真正的网站程序、数据库、图片、课堂数据全部在群晖 NAS(内网)或对象存储上。

打个比方:ECS 是小区的传达室和门禁,群晖才是里面真正住人、放东西的楼。传达室可以换、可以重建,只要把门禁规则(配置文件)搬过去,楼里的东西一件都不会丢。


二、ECS 上到底跑了哪些东西

2.1 端口实测结果(2026-10-08 公网探测)

端口 状态 对应服务 用途
80 开放 Nginx HTTP 入口,统一 301 跳转到 HTTPS
443 开放 Nginx HTTPS 入口,TLS 在此终止,对外服务所有域名
7000 开放 frps frp 服务端通信端口,群晖 frpc 主动连上来注册隧道
7500 开放(401 需认证) frps frps 管理面板 Dashboard,查看在线代理
22 公网关闭/过滤 SSH 可能改了端口,或被阿里云安全组限制为指定 IP
8080/8082/8084/3306/6379 关闭 — 回源端口与数据库端口均不对公网暴露(正确的安全做法)

2.2 ECS 上运行的三大组件

组件 1:Nginx 1.24.0(Web 服务器 / TLS 终止 / 反向代理)

职责: - 监听 80 / 443,是所有域名的统一入口; - 用通配符证书完成 HTTPS 加密/解密; - 按域名(server_name)把请求转发给本机的 frps(通常是反代到 frps 的 vhost 端口,如 127.0.0.1:某端口); - 80 端口负责把所有 HTTP 请求 301 永久跳到 HTTPS。

已实测:所有子域名响应头都是 Server: nginx/1.24.0 (Ubuntu),http://www 返回 301 → https://www。

组件 2:frps(FRP 服务端,内网穿透)

职责: - 监听 7000,等待内网群晖上的 frpc 主动连接(出站连接,所以群晖不需要公网 IP); - 群晖 frpc 连上后,把"哪个域名对应内网哪个容器的哪个端口"注册成一条条代理(proxy); - Nginx 解完 TLS 后把请求交给 frps,frps 顺着隧道转给群晖上对应容器; - 7500 端口提供管理面板,可看当前在线客户端和代理。

已实测:7000 开放、7500 返回 401(面板开启了认证),所有域名都能正常回源出页面,说明 frps 与群晖 frpc 隧道正常。

组件 3:acme.sh + cron(证书自动申请与续期)

职责: - 用 DNSPod API(dns_dp)自动完成 DNS-01 验证,向 Let's Encrypt 申请 *.liufeisheng.cn + liufeisheng.cn 通配符证书; - 把证书安装到 Nginx 使用的路径,并自动 reload; - cron 每天检查,到期前 30 天自动续期,永久免人工。

已实测:新证书 2026-10-07 生效、2027-01-05 到期,全部子域名小锁恢复。 证书与工具关键路径(需在 ECS 上核对确认):

~/.acme.sh/                              # acme.sh 主目录,含配置、账号、各证书目录
~/.acme.sh/liufeisheng.cn_ecc/           # 通配符证书原件
/etc/letsencrypt/live/liufeisheng.cn/    # Nginx 实际引用的 fullchain.pem / privkey.pem
crontab -l                               # acme.sh 的自动续期定时任务

2.3 ECS 上"有什么"和"没什么"

ECS 上有(都是可重建的配置/程序): - Nginx 程序 + 各站点 server 配置 - frps 程序 + frps 配置(token、端口、域名规则) - acme.sh 程序 + 证书文件 + cron 任务 - Ubuntu 系统本身

ECS 上没有(这是关键,迁移时不用搬数据): - ❌ 网站程序源码(Django 项目在群晖 \\FeiNas\docker\mysite) - ❌ 业务数据库(MongoDB、accounts.sqlite、classroom.sqlite 都在群晖) - ❌ 相册图片(实测存放在腾讯云 COS:site-1314099117.cos.ap-guangzhou.myqcloud.com) - ❌ 课堂点名/积分数据(classroom.sqlite 在群晖)


三、个人网站里,哪些内容"必须经过 ECS",哪些不经过

3.1 必须经过 ECS 的(全部是"入口/通道/加密"层面)

事项 为什么离不开 ECS
用域名访问任何一个站点 所有域名 A 记录都指向 47.113.x.x,公网流量第一站必到 ECS
HTTPS 小锁 / 加密 证书在 ECS 的 Nginx 上,握手和解密都在 ECS 完成
HTTP 自动跳 HTTPS ECS 的 Nginx 80 端口负责 301
公网能访问到内网的群晖网站 必须经 ECS 的 frps 与群晖 frpc 建立的隧道转发
证书自动续期 acme.sh 跑在 ECS 上(也可迁到别处,但当前在 ECS)

涉及的全部域名(已实测均解析到 ECS): liufeisheng.cn、www、blog、crm、dh、nas、jxcg .liufeisheng.cn

3.2 不经过 ECS 的(页面加载后,这些资源从别处直连)

已实测首页引用的外部资源: - 相册/图片:腾讯云 COS(cos.ap-guangzhou.myqcloud.com),浏览器拿到签名 URL 后直连 COS,不占 ECS 带宽; - jQuery / 前端库:cdn.bootcdn.net、code.jquery.com,走公共 CDN; - 首页外链导航:B站、CSDN、抖音、豆包、知网、超星、工信部备案站等,点击后直接跳第三方; - 业务逻辑与数据读写:Nginx 只是转发,真正的页面渲染、数据库查询由群晖上的 Django 容器完成。

结论:ECS 一掉线,所有站点立刻打不开(因为大门没了);但 ECS 掉线期间,群晖里的数据、OSS/COS 里的图片全都安全,不会有任何丢失。

3.3 完整请求链路图

        浏览器
          │  HTTPS 请求 (任意 *.liufeisheng.cn)
          ▼
┌─────────────────────────────────────────────┐
│  阿里云 ECS 47.113.x.x                    │
│                                               │
│  Nginx :443  ── TLS 终止(通配符证书)          │
│     │        ── 按 server_name 分流           │
│     ▼                                         │
│  frps (本机回源) ── 7000 端口保持隧道 ──┐      │
└─────────────────────────────────────────┼─────┘
                                           │ 加密隧道(出站, 群晖主动连)
                                           ▼
                          ┌──────────────────────────────┐
                          │  群晖 DS920+ (内网 FeiNas)    │
                          │  frpc                        │
                          │   ├─ www → Django:8084 容器   │
                          │   ├─ crm → CRM 容器:8082      │
                          │   ├─ blog → Blog 容器         │
                          │   ├─ dh/jxcg → 对应容器       │
                          │   └─ 数据: MongoDB + 2个sqlite│
                          └──────────────────────────────┘

  浏览器另外直连(不经过ECS):
    腾讯云 COS(图片) / bootcdn(前端库) / 各第三方外链

四、ECS 到期如何迁移

由于 ECS 不存业务数据,迁移的本质是:在新机器上重装"Nginx + frps + acme.sh"三类程序,把旧 ECS 的配置文件原样搬过去,再把域名指向新 IP。 业务数据完全不用动。

4.1 三种可选方案对比

方案 做法 优点 缺点/风险 推荐度
A. 换一台公网云服务器(推荐) 在腾讯云/阿里云/华为云新开一台轻量服务器,复刻三组件,域名改指新 IP 架构不变、最稳、备案容易衔接、成本可控 需要重新做一次配置,IP 变化要改 frpc 和 DNS ⭐⭐⭐⭐⭐
B. 去掉 ECS,群晖直接出口 给群晖配公网 IP / IPv6 / DDNS,Nginx、frps 都搬到群晖 省一台服务器月租 家宽通常无固定公网 IP/封 80、443;暴露内网安全风险高;备案与稳定性差;你本人也认为自建不稳定 ⭐⭐
C. 升级/续费同账号 ECS 直接续费或在阿里云内升配、换机 配置几乎不用改 仍被阿里云绑定,长期成本;不叫真正"迁移" ⭐⭐⭐(图省事首选)

结合你一贯的偏好(重视稳定、不愿自建折腾、喜欢零运维),最推荐方案 A:开一台轻量应用服务器做同样的"传达室"。下面给方案 A 的完整步骤。

4.2 迁移前:在旧 ECS 上必须导出/备份的配置清单

登录旧 ECS(注意 22 端口可能改了或被安全组限制,必要时先在阿里云控制台把本机 IP 加入安全组,或用控制台 VNC)。

# 1) 导出 Nginx 全部站点配置
sudo tar czf /root/nginx_conf_backup.tgz /etc/nginx/
#   重点保留:/etc/nginx/nginx.conf、/etc/nginx/sites-enabled/、conf.d/ 下各 server
#   以及 /etc/letsencrypt/live/liufeisheng.cn/ 的证书

# 2) 导出 frps 配置(关键!里面有 token、端口、域名规则)
#   常见位置(按实际):/etc/frp/frps.toml 或 /root/frp/frps.toml 或 /usr/local/frp/
sudo find / -name 'frps.toml' -o -name 'frps.ini' 2>/dev/null
sudo cp <找到的frps配置> /root/frps.toml.bak

# 3) 导出 acme.sh 整个目录(含证书、账号、续期配置)
sudo tar czf /root/acme_backup.tgz /root/.acme.sh

# 4) 记录当前证书实际文件
sudo ls -l /etc/letsencrypt/live/liufeisheng.cn/

# 5) 导出 crontab(acme.sh 自动续期任务)
crontab -l > /root/crontab.bak

# 6) 记录版本,便于新机装一致版本
nginx -v
frps --version            # 或 ./frps -v
~/.acme.sh/acme.sh --version

把 /root/ 下这几个备份文件(nginx_conf_backup.tgz、frps.toml.bak、acme_backup.tgz、crontab.bak)下载到本地电脑保存。

同时需要准备好的"非服务器"信息: - DNSPod API Token 的 ID 和 Token(用于新机继续自动验证/续期); - 阿里云控制台安全组规则截图(要放行哪些端口)。

4.3 迁移实施步骤(在新服务器上)

建议先在新机器上把一切配好、自测通过,最后再切域名,做到"不断电切换"。

第 1 步:开通新服务器,记录新公网 IP - 可选腾讯云轻量(和 DNS、COS 同账号更顺手)、阿里云轻量等; - 系统选 Ubuntu 22.04/24.04; - 在云控制台"防火墙/安全组"放行:80、443、7000、7500;SSH(22 或自定义)只对自己 IP 开放。

第 2 步:安装三组件

apt update
apt install -y nginx cron socat git

# frps:从 Gitee/官方 release 下载(版本尽量和旧机一致,避免和群晖frpc版本不兼容)
#   例如(架构按实际 amd64):
#   wget 对应 frp_x.x.x_linux_amd64.tar.gz,解压得到 frps

# acme.sh:用 Gitee 镜像(国内服务器 GitHub 会被重置,这是踩过的坑)
git clone https://gitee.com/neilpang/acme.sh.git /root/acme-src
cd /root/acme-src && ./acme.sh --install -m [REDACTED_EMAIL]
source ~/.bashrc
~/.acme.sh/acme.sh --set-default-ca --server letsencrypt

第 3 步:恢复 frps 配置并启动 - 用备份的 frps.toml,核对 bindPort=7000、Dashboard 7500 的账号密码、auth.token; - token 必须和群晖 frpc 配置里的完全一致; - 启动 frps(建议做成 systemd 服务,开机自启、崩溃自动拉起)。

第 4 步:改群晖 frpc 的服务器地址(关键,IP 变了) - 在群晖 frpc 套件/配置(/volume2/@appdata/frpc/frpc.toml)中: - 把 serverAddr 从旧 IP 改为新服务器 IP; - 确认 serverPort=7000、auth.token 与新机一致; - 各代理(www/crm/blog/dh/jxcg)的 customDomains 不变; - 重启群晖 frpc,在新服务器 frps 面板(新IP:7500)确认客户端上线、代理全部 online。

第 5 步:恢复 Nginx 配置和证书 - 解压 nginx_conf_backup.tgz,把各 server 配置放回; - 证书两种方式任选其一: - 简单:直接用 acme_backup.tgz 里的现有证书和 /etc/letsencrypt/live/... 文件恢复(证书还有效,无需立刻重签); - 干净:在新机用 DNSPod API 重新跑一遍签发 + install-cert(命令见配套 HTTPS 文档),等于在新机重新建立续期链路(更推荐,避免旧配置里的路径/IP 残留); - 确认 Nginx 反代指向本机 frps 的回源端口配置正确。

第 6 步:先不改 DNS,本机自测 在新服务器上用 Host 头模拟,绕过域名验证整条链路:

curl -I -H "Host: www.liufeisheng.cn" http://127.0.0.1/
curl -kI --resolve www.liufeisheng.cn:443:127.0.0.1 https://www.liufeisheng.cn/

能拿到群晖 Django 返回的 200,说明新机已完全就绪。

第 7 步:切换 DNS(把域名指向新 IP) 到 DNSPod(https://console.dnspod.cn/dns/list)把以下所有记录的值从旧 IP 改为新 IP: @、www、blog、crm、dh、nas、jxcg TTL 可提前调小(如 300 秒)以加快生效。等几分钟全球生效。

第 8 步:切后验证

# 证书与有效期
echo | openssl s_client -connect www.liufeisheng.cn:443 -servername www.liufeisheng.cn 2>/dev/null \
  | openssl x509 -noout -issuer -dates
# 逐个域名访问,浏览器 Ctrl+F5,确认小锁和页面正常

第 9 步:确认新机自动续期

crontab -l | grep acme.sh
~/.acme.sh/acme.sh --cron --force    # 演练,看到 Renew success

第 10 步:观察无误后,再让旧 ECS 到期释放 建议新旧机器并行保留几天,确认稳定、证书续期正常后,再退旧机,避免回滚无门。

4.4 迁移检查清单(打勾用)

  • [ ] 旧机 Nginx、frps、acme.sh、crontab 配置已全部导出备份
  • [ ] 新机安全组放行 80/443/7000/7500,SSH 限制来源 IP
  • [ ] frps 启动,token 与群晖一致
  • [ ] 群晖 frpc 的 serverAddr 已改为新 IP 并上线、代理全 online
  • [ ] Nginx 配置 + 证书已恢复(或重新签发)
  • [ ] 本机 Host 头自测 200 通过
  • [ ] DNSPod 所有记录(含 @)指向新 IP
  • [ ] 浏览器各域名 + 小锁正常
  • [ ] acme.sh cron 与强制演练成功
  • [ ] 新旧并行数天稳定,再释放旧 ECS

五、迁移时最容易踩的坑(提前规避)

  1. 只搬了 Nginx,忘了搬 frps 配置/token:会导致群晖连不上,全站打不开。frps 与 frpc 的 token 必须完全一致。
  2. 忘了改群晖 frpc 的 serverAddr:IP 换了但群晖还在连旧机,表现为域名切走后全部 502 或 frp 报错。
  3. frps 与 frpc 版本差异过大:可能握手不兼容。新机 frps 版本尽量与群晖 frpc 接近,必要时同步升级两边。
  4. 证书在新机要重新建立续期链路:直接拷证书能用几十天,但若不把 acme.sh 和 DNSPod Token 在新机配好,到期又会重蹈"证书过期"覆辙。
  5. 安全组漏放行 7000:群晖 frpc 连不上;7500 面板也建议只对自己 IP 开,别裸露公网。
  6. DNS 只改了 www,漏了 blog/crm/dh/nas/jxcg/@:会出现部分站点还指向旧机。所有记录都要改。
  7. 备案问题:liufeisheng.cn 已有工信部备案。若新服务器换了云厂商或跨省,可能需要在新厂商做"接入备案",否则 80/443 可能被拦截。迁移前先向新服务器厂商确认备案接入要求,这是最容易被忽略、影响最大的一条。
  8. 旧机太早释放:万一新链路有问题无法回滚。务必新旧并行观察数天。

六、需要登录 ECS 进一步核对确认的事项

以下为推断路径/配置,建议下次登录 ECS 时核实并补进本文,使文档 100% 精确:

  • [ ] frps 配置文件的确切路径和完整内容(token、vhost 回源端口、Dashboard 账密)
  • [ ] Nginx 各 server 的具体配置:每个域名反代到 frps 的哪个本地端口
  • [ ] Nginx 与 frps 是"Nginx 反代 frps vhost"还是"frps 直接处理 HTTPS"(实测 TLS 由 Nginx 终止,倾向前者)
  • [ ] frps 是否做成 systemd 服务、是否开机自启
  • [ ] ECS 的规格(几核几 G、带宽、磁盘)和到期时间,便于新选型
  • [ ] 是否还跑了除这三组件外的其他服务(可用 ss -lntp、systemctl list-units --type=service 全面盘点)

在 ECS 上可一键盘点的命令:

ss -lntp                                        # 所有监听端口和进程
systemctl list-units --type=service --state=running   # 所有运行中的服务
ls /etc/nginx/sites-enabled/ /etc/nginx/conf.d/      # 站点配置
find / -name 'frps.toml' 2>/dev/null                 # 找 frps 配置
crontab -l                                           # 定时任务

七、总结

  1. ECS 只承担"公网入口 + HTTPS 加密 + 内网穿透 + 证书续期"四件事,不存任何业务数据。
  2. 个人网站所有公网访问都必须经过 ECS 的 Nginx 和 frps;但图片(腾讯云 COS)、前端库(CDN)、程序与数据库(群晖)都不在 ECS 上。
  3. ECS 到期迁移 = 新机重装 Nginx + frps + acme.sh,搬配置、改群晖 frpc 指向、改 DNS,业务数据不用动。
  4. 最推荐"开一台轻量服务器复刻";迁移前导出配置,迁移中先自测后切 DNS,并特别注意 frps token、frpc 新 IP、证书续期链路、备案接入这四个关键点。