本文最后更新于22 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
一、目标
我的目标很简单:
本地服务:
127.0.0.1:8000
公网访问:
118.178.140.189:18000
最终实现:
http://118.178.140.189:18000/chat
↓
转发到
↓
http://127.0.0.1:8000/chat
二、FRP 本质(先搞懂)
FRP 分两部分:
1. 服务端(服务器上)
frps
部署在公网服务器(如阿里云)
作用:
负责接收公网请求 + 转发给你的本地电脑
2. 客户端(你自己电脑)
frpc
运行在本地 Mac / Windows
作用:
把本地8000端口注册到服务器
三、整体链路
公网用户
↓
118.178.140.189:18000
↓
frps(云服务器)
↓
frpc(本地电脑)
↓
127.0.0.1:8000
四、服务器端配置(1Panel)
我的环境:
1Panel 应用商城安装 frps
核心参数:
bindPort = 7000
dashboardPort = 7500
token = token123456(可选)
端口作用:
7000
frpc连接frps的控制端口
7500
frps后台管理页面
18000
真正给公网访问的业务端口
五、服务器防火墙(非常关键)
必须放行:
7000/tcp
7500/tcp(可选)
18000/tcp
大坑:
很多人只开7000。
结果:
frpc连接成功
但公网18000打不开
原因:
7000只是控制连接,不是业务访问端口
六、本地安装 frpc(Mac)
下载:
curl -L -o frp.tar.gz https://github.com/fatedier/frp/releases/download/v0.68.1/frp_0.68.1_darwin_amd64.tar.gz
tar -zxvf frp.tar.gz
cd frp_0.68.1_darwin_amd64
七、frpc.toml 正确配置
serverAddr = "118.178.140.189"
serverPort = 7000
auth.method = "token"
auth.token = "token123456"
[[proxies]]
name = "gateway"
type = "tcp"
localPort = 8000
remotePort = 18000
八、启动:
./frpc -c frpc.toml
九、成功标志
必须看到:
login to server success
start proxy success
十、你真正踩过的大坑(重点)
坑1:新版 FRP 不支持 .ini文件格式
错误:
json: cannot unmarshal string into Go value
原因:
0.68+ 默认 TOML
正确:
frpc.toml
坑2:UI显示配置 ≠ Docker真实运行配置
表面:
1Panel 应用商城看到:
token123456
实际容器:
# auth.token 被注释
本质:
UI只是配置入口
Docker容器配置才是真生效
验证方式:
docker exec -it 容器ID cat /etc/frp/frps.toml
十一、1Panel 最大认知误区
记住:
应用商城页面 ≠ 最终运行配置
优先级:
UI配置
↓
Docker启动脚本
↓
容器内 /etc/frp/frps.toml
↓
最终生效
十二、最终最稳方案
服务端:
全程只用 1Panel 改
客户端:
手动维护 frpc.toml
十三、测试方法
本地测试:
curl http://127.0.0.1:8000/chat
公网测试:
curl http://118.178.140.189:18000/chat
如果返回一致:
FRP配置完全成功
十四、接口调用方式
原本:
http://127.0.0.1:8000/chat
现在:
http://118.178.140.189:18000/chat
十五、适用范围
不仅 /chat
还包括:
/api/*
/docs
/ws
/chat/asr/stream
十六、安全建议
最低要求:
开 token
改默认 token
改 dashboard 默认密码
限制防火墙IP(可选)
十七、一句话终极总结
7000 = frpc连接服务器
18000 = 公网访问你的本地服务
十八、我的最终理解
以前以为:
FRP就是端口映射
现在明白:
FRP = 服务端(frps) + 客户端(frpc) + 防火墙 + 配置同步 + 容器配置管理
十九、最终排障口诀
先看本地服务
再看frpc
再看frps
最后看防火墙
二十、给后来者的建议
如果你用的是 1Panel:
永远先确认:
docker exec -it 容器ID cat /etc/frp/frps.toml
因为:
你看到的,不一定是容器真正跑的。









