阿里云 ECS职责分析与到期迁移指南
撰写日期: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
五、迁移时最容易踩的坑(提前规避)
- 只搬了 Nginx,忘了搬 frps 配置/token:会导致群晖连不上,全站打不开。frps 与 frpc 的 token 必须完全一致。
- 忘了改群晖 frpc 的 serverAddr:IP 换了但群晖还在连旧机,表现为域名切走后全部 502 或 frp 报错。
- frps 与 frpc 版本差异过大:可能握手不兼容。新机 frps 版本尽量与群晖 frpc 接近,必要时同步升级两边。
- 证书在新机要重新建立续期链路:直接拷证书能用几十天,但若不把 acme.sh 和 DNSPod Token 在新机配好,到期又会重蹈"证书过期"覆辙。
- 安全组漏放行 7000:群晖 frpc 连不上;7500 面板也建议只对自己 IP 开,别裸露公网。
- DNS 只改了 www,漏了 blog/crm/dh/nas/jxcg/@:会出现部分站点还指向旧机。所有记录都要改。
- 备案问题:liufeisheng.cn 已有工信部备案。若新服务器换了云厂商或跨省,可能需要在新厂商做"接入备案",否则 80/443 可能被拦截。迁移前先向新服务器厂商确认备案接入要求,这是最容易被忽略、影响最大的一条。
- 旧机太早释放:万一新链路有问题无法回滚。务必新旧并行观察数天。
六、需要登录 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 # 定时任务
七、总结
- ECS 只承担"公网入口 + HTTPS 加密 + 内网穿透 + 证书续期"四件事,不存任何业务数据。
- 个人网站所有公网访问都必须经过 ECS 的 Nginx 和 frps;但图片(腾讯云 COS)、前端库(CDN)、程序与数据库(群晖)都不在 ECS 上。
- ECS 到期迁移 = 新机重装 Nginx + frps + acme.sh,搬配置、改群晖 frpc 指向、改 DNS,业务数据不用动。
- 最推荐"开一台轻量服务器复刻";迁移前导出配置,迁移中先自测后切 DNS,并特别注意 frps token、frpc 新 IP、证书续期链路、备案接入这四个关键点。