✌️ 方案导读:让我们来构建优雅的穿透链路
在使用 1Panel面板 管理本地服务器时,很多小伙伴会遇到“内网穿透”的三大难题:
- SSL 证书难搞:内网环境无法通过 HTTP 验证,导致 HTTPS 部署麻烦。
- IP 识别失真:穿透后,本地网站后台看到的访客 IP 全是
127.0.0.1,无法进行精准统计和安全防护。- 架构臃肿:在本地和 VPS 上反复配置 Nginx,逻辑混乱且难以维护。
本文的核心思路:遵循 “专业的事交给专业的工具” 原则,构建一套工业级的访问链路:
- VPS 端(1Panel):作为“流量闸门”,负责公网接入、SSL 自动续签和域名分发。
- Frp 隧道:作为“透明管道”,利用 TCP 模式 极致稳定地传输数据,不干扰协议内容。
- 本地端(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
- 登录 VPS 的 1Panel 面板
- 进入「应用商店」
- 搜索
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 网站访问 |
⚠️ 注意:
22280、22281、22282等 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
- 登录本地 1Panel 面板
- 进入「应用商店」
- 搜索
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 防火墙已放行
7000、80、443 - Frps 服务端正常运行
- Frpc 客户端配置文件正确,服务正常运行
- 域名 DNS 已解析到 VPS IP
- VPS 中已为每个域名创建反向代理网站
- SSL 证书已申请并启用 HTTPS
8️⃣、配置要点总结
| 原则 | 说明 |
|---|---|
| 🎯 Frpc 直连服务 | localPort 填写服务的原始端口,不在本地额外做反代 |
| 🔌 RemotePort 独立 | 每个服务使用唯一的 RemotePort,互不冲突 |
| 🔄 VPS 反代对应 | Nginx 代理地址指向127.0.0.1:RemotePort |
| 🛡️ 防火墙最小化 | VPS 只需开放7000、80、443,RemotePort 无需开放 |
| 🌍 域名一一对应 | 每个服务使用独立域名(或子域名) |