一、极简配置与精准定位

1. FRP 服务端配置(云服务器)

# /etc/frp/frps.toml
bindPort = 7000
auth.token = "@Lcc125331"
  • 核心作用:在云服务器上创建 FRP 服务端

  • 关键点:仅保留必要参数,避免多余配置

2. FRP 客户端配置(绿联 NAS)

# frpc.toml
serverAddr = "60.205.143.23"  # 您的云服务器公网IP
serverPort = 7000
auth.token = "@Lcc125331"

[[proxies]]
name = "halo-app"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8090  # Halo 默认端口
remotePort = 6001  # 云服务器映射端口
  • 核心作用:将本地 Halo 服务映射到云服务器

  • 关键点

  • 使用 TCP 基础协议,避免 HTTP 模式的复杂性

  • 明确指定 Halo 的实际端口(8090)

  • 使用环回地址 127.0.0.1 确保本地访问安全

3. Nginx 反向代理配置(云服务器)

server {
  listen 80;
  server_name perilxx.cn www.perilxx.cn;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl http2;
  server_name perilxx.cn www.perilxx.cn;

  ssl_certificate /etc/nginx/ssl/perilxx.cn/fullchain.pem;
  ssl_certificate_key /etc/nginx/ssl/perilxx.cn/privkey.pem;

  location / {
    proxy_pass http://127.0.0.1:6001;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }

  error_page 502 /502.html;
  location = /502.html {
    return 200 '服务启动中,请稍后刷新';
  }
}
  • 核心作用:将 HTTPS 请求转发到本地的 6001 端口

  • 关键点

  • 最简化的代理配置,只保留 5 个必要头部

  • 去除了所有非必要的优化和安全配置

  • 保留基础错误处理

二、成功部署流程

步骤 1:配置 FRP 服务端(云服务器)

# 安装 FRPS
wget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_amd64.tar.gz
tar -zxvf frp_0.51.3_linux_amd64.tar.gz
sudo mv frp_0.51.3_linux_amd64 /usr/local/frp

# 创建配置文件
echo 'bindPort = 7000
auth.token = "@Lcc125331"' | sudo tee /usr/local/frp/frps.toml

# 启动服务
sudo /usr/local/frp/frps -c /usr/local/frp/frps.toml &

步骤 2:配置 FRP 客户端(绿联 NAS)

# 创建 frpc.toml 配置文件
cat > frpc.toml <<EOF
serverAddr = "60.205.143.23"
serverPort = 7000
auth.token = "@Lcc125331"

[[proxies]]
name = "halo-app"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8090
remotePort = 6001
EOF

# 启动 FRPC 容器
docker run -d \
  --name frpc \
  -v $(pwd)/frpc.toml:/etc/frp/frpc.toml \
  snowdreamtech/frpc

步骤 3:配置 Nginx(云服务器)

# 创建极简配置文件
sudo nano /etc/nginx/conf.d/halo.conf

# 粘贴配置内容
# 测试并应用配置
sudo nginx -t && sudo systemctl reload nginx

三、成功验证流程

1. 验证 FRP 通道

curl http://127.0.0.1:6001

✅ 成功响应:返回 Halo 的 HTML 内容

2. 验证 Nginx 代理

# 在云服务器上执行
curl -k https://perilxx.cn

✅ 成功响应:返回与上一步相同的内容

3. 最终访问测试

在浏览器访问:https://perilxx.cn

✅ 成功显示:Halo 博客系统的登录界面

四、成功关键因素分析

1. 配置极简化

移除了所有非必要指令:

  • 去除了复杂的 SSL 优化参数

  • 移除了多余的缓存控制

  • 删除了不必要的安全头部

2. 协议选择正确

使用 TCP 模式代替 HTTP 模式:

  • 避免虚拟主机配置问题

  • 基础协议更稳定可靠

  • 减少配置复杂度

3. 精准端口映射

4. 问题隔离策略

分阶段验证:

  1. 先验证 FRP 通道:curl http://127.0.0.1:6001

  2. 再验证 Nginx 代理:curl -k https://perilxx.cn

  3. 最后全链路测试

五、经验总结

  1. KISS 原则(Keep It Simple, Stupid)

  • 复杂配置是万恶之源

  • 每增加一个配置项,故障概率指数级增长

  1. 分层验证策略

  • 从底层开始逐层验证

  • 先确保通道畅通,再处理上层协议

  1. 规避非必要特性

  • 初期避免使用 HTTP 模式等高级特性

  • 基础 TCP 映射 + Nginx 代理是最可靠组合

  1. 精准定位问题

  • 502 错误 → 检查后端服务

  • 连接失败 → 检查 FRP 通道

  • 重定向循环 → 检查代理配置

六、最终成果

现在您可以通过:

  • 本地访问:http://绿联NAS_IP:8090

  • FRP 直连:http://云服务器_IP:6001

  • 域名访问:https://perilxx.cn

三种方式均能访问 Halo 应用,且完全使用您的自定义域名和 HTTPS 加密。

这个方案的成功在于它的简洁性和针对性,完美解决了您的核心需求:通过自定义域名安全访问绿联 NAS 上的 Halo 应用。