树莓派4B自建网页服务器指南(7):阿里云 ECS 反向代理——隐端口、保备案的生产方案(下)(主线终章)
回看上篇 !
承接上篇 继续:
四、主轨配置链路:ECS + frp 隧道(推荐方案)
4.1 frp 是什么
frp(Fast Reverse Proxy) 是一个开源的内网穿透工具,由 Go 语言编写,支持 TCP、UDP、HTTP、HTTPS 等多种协议。它的核心思想是:内网服务主动出网连接到公网服务器,建立一个长连接隧道,公网用户通过服务器即可访问内网服务。
在本方案中:
- ECS 上运行 frp 的服务端(frps),监听 7000 端口
- 树莓派 上运行 frp 的客户端(frpc),主动出网连接 ECS 的 frps
- 隧道建立后,ECS 上的 Nginx 将请求转发到本机 7000 端口,frps 再通过已建立的隧道将数据送回树莓派
这种方式的关键优势是:frpc 是主动出网连接,不依赖任何入站端口。
因此,光猫和路由器的 IPv6 防火墙可以全部开到最高档位,树莓派也不需要对外暴露任何端口。
4.2 ECS 侧:安装 frps(服务端)
cd /tmp
# 下载 frp(以 v0.69.1 为例,请前往 https://github.com/fatedier/frp/releases 查最新版)
wget https://github.com/fatedier/frp/releases/download/v0.69.1/frp_0.69.1_linux_amd64.tar.gz
# ecs下载慢,可能还限制代理链接
# 可以本地电脑使用代理下载后上传ecs
# windows powershell:
curl.exe -LO https://gh.llkk.cc/https://github.com/fatedier/frp/releases/download/v0.69.1/frp_0.69.1_linux_amd64.tar.gz
#上传命令:ecs_user 为你的ecs登陆用户,ECS_IP 为你的云主机ip地址
scp frp_0.69.1_linux_amd64.tar.gz ecs_user@ECS_IP:/tmp
#回到ECS的 /tmp 目录
tar -xzf frp_0.69.1_linux_amd64.tar.gz
cd frp_0.69.1_linux_amd64
# 复制服务端二进制和配置
sudo cp frps /usr/local/bin/
sudo chmod +x /usr/local/bin/frps
sudo mkdir -p /etc/frp
sudo cp frps.toml /etc/frp/代理下载链接,若代理超时 代理站点可进行替换,通过代理查询站查询可用节点地址替换。
例如:https://gh.llkk.cc/https://github.com/....
替换为:https://777.z321.cc.cd/https://github.com/....代理查询站:https://github.akams.cn/
编辑 /etc/frp/frps.toml:
# 先生成令牌,记下输出
TOKEN=$(openssl rand -hex 16)
echo "你的令牌是: $TOKEN"
# 写入配置文件
sudo bash -c "cat > /etc/frp/frps.toml << EOF
bindPort = 7000
auth.token = \"$TOKEN\"
# 只允许 frpc 申请这些端口(按实际用到的,限制隧道安全)
allowPorts = [
{ start = 9132, end = 9132 }
]
EOF"
# 验证写入结果
cat /etc/frp/frps.toml创建 systemd 服务文件 /etc/systemd/system/frps.service:
sudo tee /etc/systemd/system/frps.service > /dev/null << 'EOF'
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.toml
[Install]
WantedBy=multi-user.target
EOF启动并启用:
sudo systemctl daemon-reload
sudo systemctl enable --now frps
sudo systemctl status frps
# 确认 active (running)4.3 树莓派侧:安装 frpc(客户端)
cd /tmp
# 下载 arm64 版本
wget https://gh.llkk.cc/https://github.com/fatedier/frp/releases/download/v0.69.1/frp_0.69.1_linux_arm64.tar.gz
tar -xzf frp_0.69.1_linux_arm64.tar.gz
cd frp_0.69.1_linux_arm64
# 复制客户端二进制和配置
sudo cp frpc /usr/local/bin/
sudo chmod +x /usr/local/bin/frpc
sudo mkdir -p /etc/frp
sudo cp frpc.toml /etc/frp/代理下载链接,若代理超时 代理站点可进行替换,通过代理查询站查询可用节点地址替换。
例如:https://gh.llkk.cc/https://github.com/....
替换为:https://777.z321.cc.cd/https://github.com/....代理查询站:https://github.akams.cn/
编辑 /etc/frp/frpc.toml:
sudo tee /etc/frp/frpc.toml > /dev/null << 'EOF'
serverAddr = "ECS公网IPv4地址"
serverPort = 7000
auth.token = "你的frp令牌(与ECS侧一致)"
[[proxies]]
name = "pi-https"
type = "tcp"
localIP = "::1"
localPort = 9132
remotePort = 9132
EOF💡 localIP = "::1"是因为树莓派 Nginx 监听 [::]:9132(IPv6 回环地址),frpc 通过本机 IPv6 回环访问 Nginx。如果你的 Nginx 配置中 listen 9132 有 [::]:前缀(即仅 IPv4),则 localIP应改为 127.0.0.1。
创建 systemd 服务文件 /etc/systemd/system/frpc.service:
sudo tee /etc/systemd/system/frpc.service > /dev/null << 'EOF'
[Unit]
Description=Frp Client Service
After=network.target
Wants=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.toml
[Install]
WantedBy=multi-user.target
EOF启动并启用:
sudo systemctl daemon-reload
sudo systemctl enable --now frpc
sudo systemctl status frpc
# 确认 active (running),且日志中应有 "proxy pi-https tcp" registered4.4 ECS 侧:Nginx 反代配置(主轨)
创建 pi.jiejinx.cn的独立配置文件
sudo tee /etc/nginx/conf.d/pi.jiejinx.cn.conf > /dev/null << 'EOF'
server {
listen 80;
server_name pi.jiejinx.cn;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name pi.jiejinx.cn;
ssl_certificate /etc/nginx/ssl/jiejinx.cn/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/jiejinx.cn/privkey.pem;
location / {
# 对应 frpc 配置中的 remotePort=9132,frps 在此监听并转发至树莓派
proxy_pass http://127.0.0.1:9132;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
EOF启用站点并重载:
sudo nginx -t && sudo systemctl reload nginx4.5 树莓派侧调整
nginx 新增 9132 HTTP server (供ECS侧 frps 回源访问)
# 树莓派上,新建 conf.d/pi-frp-http.conf
sudo tee /etc/nginx/conf.d/pi-frp-http.conf > /dev/null << 'EOF'
server {
listen 9132;
listen [::]:9132;
server_name pi.jiejinx.cn pi-ddns.jiejinx.cn;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
EOF重载 Nginx:
sudo nginx -t && sudo systemctl reload nginx💡 ufw 说明:主轨 frp 下,树莓派原 9133 端口不再需要对外暴露(ECS 回源走的是 frp 隧道反向通道)。你可以选择:
- 保留 ufw 9133 放行(无影响,反正没人打得进来)
- 删除 ufw 9133 规则(更严格):
sudo ufw delete allow 9133/tcp无论哪种选择,光猫和路由器的 IPv6 防火墙都可以开到最高档位。
4.6 主轨配置验证
# 1. ECS 侧:确认 frps 监听
ss -tlnp | grep 7000 # 应看到 frps
# 2. 树莓派侧:确认 frpc 已注册
systemctl status frpc # 日志中应有 "proxy pi-https tcp" registered
# 3. 浏览器验证
# https://pi.jiejinx.cn → 应显示树莓派 Nginx 页面,无端口号,证书锁 ✅
# 4. 日志核对
tail -f /var/log/nginx/access.log # ECS 侧,应看到用户公网 IP
# 树莓派侧:
tail -f /var/log/nginx/access.log # 应看到 ::1(frpc 本机回环访问)五、备轨配置链路:ECS + ddns-go 直连(次选方案)
5.0 备轨链路说明
备轨链路不需要安装 frp。它直接利用第六篇已经搭建好的 IPv6 直连环境(ddns-go + 公网 IPv6 + 树莓派 9133),仅在 ECS 上增加一层 Nginx 重定向。如果你已经完成了第六篇的全部配置,备轨只需要在 ECS 上配置 Nginx 即可,树莓派侧无需任何改动。
备轨的优点是配置简单、带宽上限高(家宽上传 30-50Mbps vs ECS 1-3Mbps),缺点是依赖家宽 IPv6 入站通畅,光猫和路由器必须处于低防护档位。
⚠️ 合规与安全声明:备轨依赖家宽 IPv6 入站通畅(光猫 IPv6 SPI 关闭、路由器 IPv6 防火墙处于低档位),这意味着家宽网络中的设备(电脑、手机等)的 IPv6 地址也暴露在公网中。
本方案不承诺合规性,家宽 IP 无法备案,域名 pi-raw.jiejinx.cn虽解析到 ECS 已备案,但回源链路 pi-ddns.jiejinx.cn指向家宽 IPv6,存在合规摩擦。
此链路仅供自用、非经营、且了解相关风险的读者参考。若需长期运行,请务必阅读 6.1 番外篇(IPv6 直连防火墙补完)并自行把控安全措施。
5.1 前置条件确认
- ✅ 第六篇已完整配置:ddns-go 正常运行,pi-ddns.jiejinx.cn的 AAAA 记录指向树莓派公网 IPv6
- ✅ 光猫 IPv6 SPI 已关闭(第六篇 6.1 节)
- ✅ 路由器 IPv6 防火墙处于低档位(第六篇 6.1 节)
- ✅ 树莓派 ufw 已放行 9133/tcp (v6)(第六篇 6.4 节)
- ✅ 公网 IPv6 直连已验证通过(第六篇 7 节)
5.2 ECS 侧:Nginx 反代配置(备轨)
创建 Nginx 站点配置文件 /etc/nginx/conf.d/pi-raw.jiejinx.cn.conf:
sudo tee /etc/nginx/conf.d/pi-raw.jiejinx.cn.conf > /dev/null << 'EOF'
server {
listen 80;
server_name pi-raw.jiejinx.cn;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name pi-raw.jiejinx.cn;
ssl_certificate /etc/nginx/ssl/jiejinx.cn/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/jiejinx.cn/privkey.pem;
location / {
return 302 https://pi-ddns.jiejinx.cn:9133$request_uri;
}
}
EOF重载验证:
sudo nginx -t && sudo systemctl reload nginx
curl -I https://pi-raw.jiejinx.cn
# 应 200,内容与 pi.jiejinx.cn 一致(都是树莓派首页)5.3 树莓派侧:无需额外配置
第6篇的 ufw 规则已放行 9133,acme.sh 证书自动续期,无需改动。
5.4 备轨配置验证
# 1. 确认 DNS 解析
nslookup pi-ddns.jiejinx.cn 8.8.8.8
# 应返回树莓派公网 IPv6
# 2. 浏览器验证(带跳转)
# https://pi-raw.jiejinx.cn → 应自动跳转到 https://pi-ddns.jiejinx.cn:9133/,页面显示正常 ✅
# 3. 日志核对
tail -f /var/log/nginx/access.log # ECS 侧,应仅看到 302 请求
# 树莓派侧:
tail -f /var/log/nginx/access.log # 应看到用户公网 IP(直连请求)七、备案相关
- 主域名: (如:jiejinx.cn)需 ICP 备案,备案主体根据自身情况填写信息,域名注册平台一般均提供线上备案入口
- 备案流程:平台控制台 → ICP 备案 → 填资料 → 初审 → 管局审核(约 1-20 工作日)
- 备案期间:ECS 可正常使用,但 pi.jiejinx.cn的 A 记录不能指向国内 IP(可暂时指向海外节点,或使用 pipre.jiejinx.cn等临时子域)
- 备案通过后:pi.jiejinx.cnA 记录 → ECS 公网 IP,主线正式上线
八、双轨方案对比与选择建议
| 维度 | 主轨:ECS + frp 隧道(推荐) | 备轨:ECS + ddns-go 直连 |
|---|---|---|
| 合规性 | ✅ 完全合规(ECS 备案,家宽无暴露) | ⚠️ 部分合规(ECS 备案,但回源链到家宽 IPv6) |
| 防火墙 | ✅ 可全开(光猫/路由器防护开到最高) | ⚠️ 必须低档位(光猫低+路由器低) |
| 带宽 | ❌ ECS 带宽限制(1-3Mbps) | ✅ 家宽上传(30-50Mbps) |
| 复杂度 | 中(需搭建 frp) | 低(第六篇现网,仅加 ECS 重定向) |
| 成本 | ECS 99/年 | ECS 99/年 |
| 推荐场景 | 专栏主页、API、小流量服务 | 网盘、大文件传输、视频流(自用) |
选择建议:
如果主要需求是专栏主页、个人博客、小型 API,对带宽要求不高,追求合规和省心 → 选主轨 frp,光猫路由器全开,ECS 兜底
如果主要需求是家庭网盘、文件同步、视频流,对带宽有较高要求,且愿意接受家宽 IPv6 暴露的相关风险 → 可选备轨 ddns-go 直连,但需阅读 6.1 番外篇了解防火墙补完方案
九、总结与主线收口
本篇是专栏的主线终章。至此,完整的生产级链路已经闭环:
域名(已备案)→ ECS(公网 IPv4,SSL 终止)→ 树莓派(内容服务)
├─ 主轨:frp 隧道(推荐,防护全开)
└─ 备轨:ddns-go 直连(带宽优势,需低防护)| 篇章 | 定位 |
|---|---|
| 1-6 | 基础搭建与 IPv6 直连验证 |
| 7(本篇) | ECS 反代生产方案(主线终章) |
| 6.1 番外 | IPv6 直连防火墙补完(参考) |
| 7.1 番外 | 零成本免 ECS 方案探索(延伸阅读) |
💡 番外篇说明:如果你希望完全节约 ECS 成本、纯自用且接受家宽 IPv6 直连的相关风险,可参考 6.1 番外篇(IPv6 直连防火墙补完)和 7.1 番外篇(零成本免 ECS 方案)。这些内容不属于主线,仅供有特定需求的读者延伸阅读。
结尾寄语
至此,专栏核心链路全部闭环。能读到这里,说明你和我一样,也是个喜欢把事做透的人——从家宽IPv6一路跟到ECS双轨,这份耐心值得给自己点个赞。
祝你生产环境上线顺利,少踩坑、多摸鱼。