✌️ 方案导读:让我们来构建优雅的穿透链路

在使用 1Panel面板 管理本地服务器时,很多小伙伴会遇到“内网穿透”的三大难题:

  1. SSL 证书难搞:内网环境无法通过 HTTP 验证,导致 HTTPS 部署麻烦。
  2. IP 识别失真:穿透后,本地网站后台看到的访客 IP 全是 127.0.0.1,无法进行精准统计和安全防护。
  3. 架构臃肿:在本地和 VPS 上反复配置 Nginx,逻辑混乱且难以维护。

本文的核心思路:遵循 “专业的事交给专业的工具” 原则,构建一套工业级的访问链路:

  1. VPS 端(1Panel):作为“流量闸门”,负责公网接入、SSL 自动续签和域名分发。
  2. Frp 隧道:作为“透明管道”,利用 TCP 模式 极致稳定地传输数据,不干扰协议内容。
  3. 本地端(OpenResty):作为“业务核心”,通过 HTTP Header 注入 技术,完美找回访客真实 IP

1️⃣、环境信息示例

项目
🌐 VPS IP 23.23.23.23
🏠 本地 IP 192.168.66.66
🔌 Frps 服务端端口 7000
📊 Frps Dashboard 端口 7500
📈 Frpc Dashboard 端口 7400

📋 本地服务与端口

服务 本地端口 用途
🎛️ 1Panel 面板 13855 面板直接访问端口
📝 xblog 网站 22281 网站直接访问端口
📊 Frpc Dashboard 7400 Frpc 管理界面

🔗 VPS 暴露端口(RemotePort)

服务 RemotePort 对应本地端口
🎛️ 1Panel 面板 22280 13855
📝 xblog 网站 22281 22281
📊 Frpc Dashboard 22282 7400

🌍 外网访问域名(示例)

域名 对应服务 VPS 反代端口
1.232355.xyz 🎛️ 1Panel 面板 22280
blog.232355.xyz 📝 xblog 网站 22281
frpc.381661.xyz 📊 Frpc Dashboard 22282

2️⃣、VPS 端安装 Frps 服务端

2.1 📦 安装 Frps

  1. 登录 VPS 的 1Panel 面板
  2. 进入「应用商店」
  3. 搜索 frp,安装 Frps 服务端

2.2 ⚙️ 配置 Frps

安装时设置以下参数:

参数
🔐 认证方式 token
🎫 Token token123456

2.3 🔓 开放防火墙端口

在 VPS 防火墙中放行:

端口 协议 用途
7000 TCP Frps 服务端口(Frpc 连接用)
7500 TCP Frps Dashboard(可选)
80 TCP HTTP 网站访问
443 TCP HTTPS 网站访问

⚠️ 注意222802228122282 等 RemotePort 不需要开放防火墙,仅用于 Nginx 内部转发。

2.4 🔧 配置 Frps Dashboard 反代(可选)

为方便管理,可以为 Frps Dashboard 配置域名访问:

步骤 操作
网站 → 创建网站 → 反向代理
域名:frps.381661.xyz,端口:80
代理地址:http://127.0.0.1:7500
申请 SSL 证书,启用 HTTPS

访问地址https://frps.381661.xyz

3️⃣、本地安装 Frpc 客户端

3.1 📦 安装 Frpc

  1. 登录本地 1Panel 面板
  2. 进入「应用商店」
  3. 搜索 frp,安装 Frpc 客户端

3.2 ⚙️ Frpc 完整配置文件

安装完成后,编辑 Frpc 配置文件(通过 Dashboard 或直接编辑文件):

serverAddr = "23.23.23.23"         # VPS IP 地址
serverPort = 7000                  # VPS Frps 服务端口

auth.method = "token"              # 认证方式
auth.token = "token123456"         # 认证 Token

# 📊 Frpc Dashboard 配置(本地管理界面)
webServer.addr = "0.0.0.0"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin_xp7F2s"
webServer.pprofEnable = false

# 代理 1:1Panel 面板
[[proxies]]
name = "1panel"                    # 代理名称
type = "tcp"                       # 代理类型
localIP = "127.0.0.1"              # 本地服务地址
localPort = 13855                  # 1Panel 面板端口
remotePort = 22280                 # VPS 暴露端口

# 代理 2:xblog 网站
[[proxies]]
name = "xblog"                     # 代理名称
type = "tcp"                       # 代理类型
localIP = "127.0.0.1"              # 本地服务地址
localPort = 22281                  # xblog 网站端口
remotePort = 22281                 # VPS 暴露端口

# 代理 3:Frpc Dashboard
[[proxies]]
name = "frpc"                      # 代理名称
type = "tcp"                       # 代理类型
localIP = "127.0.0.1"              # 本地服务地址
localPort = 7400                   # Frpc Dashboard 端口
remotePort = 22282                 # VPS 暴露端口

# TLS 配置(暂不需要,保留备用)
#transport.tls.certFile = "/etc/frp/ssl/client.crt"
#transport.tls.keyFile = "/etc/frp/ssl/client.key"
#transport.tls.trustedCaFile = "/etc/frp/ssl/ca.crt"

3.3 🛡️ 本地防火墙

如需从局域网访问 Frpc Dashboard,开放 7400 端口。

访问地址http://192.168.66.66:7400 默认账号:admin / admin_xp6FHi

⚠️ 注意:本地不需要为任何服务配置反代,Frpc 直接代理服务原生端口。

4️⃣、VPS 端配置域名反向代理

为每个需要外网访问的服务,在 VPS 的 1Panel 中创建反向代理网站。

4.1 📝 通用操作步骤(每个服务重复)

步骤 操作
VPS 1Panel → 网站 → 创建网站 → 选择「反向代理
主域名:填写对应的域名(如1.232355.xyz
端口:80(先创建 HTTP 网站)
代理地址:http://127.0.0.1:对应的 RemotePort
点击「确认」创建
申请 SSL 证书:网站 → 证书 → 申请证书 → 主域名 → 验证方式HTTP → 勾选自动续签
启用 HTTPS:网站 → 域名 → HTTPS → 启用 → 选择证书

4.2 📊 三个服务的配置对照表

服务 域名 RemotePort 代理地址
🎛️ 1Panel 面板 1.232355.xyz 22280 http://127.0.0.1:22280
📝 xblog 网站 blog.232355.xyz 22281 http://127.0.0.1:22281
📊 Frpc Dashboard frpc.381661.xyz 22282 http://127.0.0.1:22282

4.3 📊 获取访客真实 IP (可选)

由于经过了 Frp 隧道转发,本地服务默认看到的访问者 IP 全是 127.0.0.1。若需在本地网站后台(如博客评论、统计)显示访客真实外网 IP,请按以下步骤配置:

修改位置:本地 1Panel → 网站 → 对应网站设置 → 「配置文件」。

server { 块内的 server_name 下方插入以下内容:

    # ================= 真实 IP 核心配置开始 =================
    # 1. 声明信任来自本地 Frpc 转发的请求(信任回环地址)
    set_real_ip_from 127.0.0.1; 
  
    # 2. 从 VPS 传过来的 HTTP Header (X-Forwarded-For) 中提取用户真实 IP
    real_ip_header X-Forwarded-For;
  
    # 3. 开启递归解析,确保是原始访客 IP
    real_ip_recursive on;
    # ================= 真实 IP 核心配置结束 =================

💡 原理解析:此配置告诉本地 Nginx 忽略 Frpc 代理层,直接读取由 VPS 封装并传递过来的 X-Forwarded-For 请求头信息。

5️⃣、完整数据流向

👤 用户浏览器
    │
    ├── 访问 https://1.232355.xyz
    │         │
    │         ▼
    │   🖥️ VPS Nginx (端口 443)
    │         │
    │         ▼
    │   反向代理到 http://127.0.0.1:22280
    │         │
    │         ▼
    │   🚀 VPS Frps 服务端
    │         │
    │         └── 通过 frp 隧道 (端口 7000) ──→ 💻 本地 Frpc 客户端
    │                                              │
    │                                              ▼
    │                                        转发到 127.0.0.1:13855
    │                                              │
    │                                              ▼
    │                                        🎛️ 本地 1Panel 面板 ✅
    │
    ├── 访问 https://blog.232355.xyz
    │         └── 同理,经隧道到达 127.0.0.1:22281 → 📝 xblog 网站 ✅
    │
    └── 访问 https://frpc.381661.xyz
              └── 同理,经隧道到达 127.0.0.1:7400 → 📊 Frpc Dashboard ✅

6️⃣、最终访问地址

服务 外网访问地址
🎛️ 本地 1Panel 面板 https://1.232355.xyz
📝 本地 xblog 网站 https://blog.232355.xyz
📊 本地 Frpc Dashboard https://frpc.381661.xyz
📈 VPS Frps Dashboard https://frps.381661.xyz

7️⃣、维护与故障排查

7.1 ⌨️ 常用命令

# 🔄 重启 Frpc(本地)
systemctl restart frpc

# 📋 查看 Frpc 日志
systemctl status frpc

# 🔄 重启 Frps(VPS)
systemctl restart frps

7.2 🔍 故障排查表

问题 可能原因 解决方法
🔴 访问域名显示 502 Frpc 未运行或 RemotePort 不匹配 检查 Frpc 状态和配置
🔴 Frpc 连接失败 VPS 防火墙未放行 7000 端口 检查 VPS 防火墙
🔴 证书申请失败 域名 DNS 未解析到 VPS IP 添加 DNS A 记录
🔴 访问显示默认页面 反向代理配置错误 检查代理地址是否正确
🔴 后台 IP 显示 127.0.0.1 没有开启 Header 转发 检查是否完成了 4.3 章节的 Real IP 配置

7.3 ✅ 检查清单

  • VPS 防火墙已放行 700080443
  • Frps 服务端正常运行
  • Frpc 客户端配置文件正确,服务正常运行
  • 域名 DNS 已解析到 VPS IP
  • VPS 中已为每个域名创建反向代理网站
  • SSL 证书已申请并启用 HTTPS

8️⃣、配置要点总结

原则 说明
🎯 Frpc 直连服务 localPort 填写服务的原始端口,不在本地额外做反代
🔌 RemotePort 独立 每个服务使用唯一的 RemotePort,互不冲突
🔄 VPS 反代对应 Nginx 代理地址指向127.0.0.1:RemotePort
🛡️ 防火墙最小化 VPS 只需开放700080443,RemotePort 无需开放
🌍 域名一一对应 每个服务使用独立域名(或子域名)

出处:https://xblog.itxgo.com/article.php?id=40
版权:本文采用 CC BY-NC-SA 4.0 协议,完整转载请注明来源。