Skip to content

树莓派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(服务端)

bash
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:

bash
# 先生成令牌,记下输出
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

启动并启用:

bash
sudo systemctl daemon-reload
sudo systemctl enable --now frps

sudo systemctl status frps
# 确认 active (running)

4.3 树莓派侧:安装 frpc(客户端)

bash
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:

bash
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:

bash
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

启动并启用:

bash
sudo systemctl daemon-reload
sudo systemctl enable --now frpc
sudo systemctl status frpc   
# 确认 active (running),且日志中应有 "proxy pi-https tcp" registered

4.4 ECS 侧:Nginx 反代配置(主轨)

创建 pi.jiejinx.cn的独立配置文件

bash
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

启用站点并重载:

bash
sudo nginx -t && sudo systemctl reload nginx

4.5 树莓派侧调整

nginx 新增 9132 HTTP server (供ECS侧 frps 回源访问)

bash
# 树莓派上,新建 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:

bash
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 主轨配置验证

bash
# 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:

bash
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

重载验证:

bash
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 备轨配置验证

bash
# 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双轨,这份耐心值得给自己点个赞。

祝你生产环境上线顺利,少踩坑、多摸鱼。