原文链接:https://blog.csdn.net/codeblf2/article/details/103752247
环境准备
- 已备案的域名一个
- 带公网 ip 的云服务器
- pc 一个
- frp 0.30.0 github 下载地址
- nginx 1.10.3
安装 frp
frp 是用 go 语言开发的内网穿透工具, 分为 frpc
, frps
.
frpc
是客户端, 安装在内网, frps
是服务端, 安装在具有公网 ip 的服务器上, frpc 和 frps 协商一个通讯端口, frpc 启动的时候会通过这个通讯端口去连接 frps, 实现内网穿透.
frps
可以配置 vhost_http_port
来实现虚拟主机服务, 浏览器请求 [公网 ip]:[vhost_http_port]
, frps 会把这个请求转发给 frpc
, frpc
接收到后再转发给服务提供者, 可以实现内网服务访问, 具体请看: frp 中文文档.
从 github 上下载 frp, 放在 /home
下, 打开 frps.ini 添加如下配置:
[common]
# frp 连接的端口
bind_port = 7000
# http 监听端口
vhost_http_port = 8080
# https 监听端口
vhost_https_port = 8443
# frp 客户端连接服务端时的 token 为了安全建议添加
token = tPaALZKtCBfN6IAp
# 二级域名后面访问的格式是 a.frp.xxx.net 或 b.frp.xxx.net
subdomain_host = frp.xxx.net
使用命令启动:
./frps -c ./frps.ini
ps: 如果云服务器有防火墙或者云安全组策略 (阿里云有, 在控制台), 需要开放你上面用到的端口.
域名解析
解析两条 A 记录: frp.xxx.net
和 *.frp.xxx.net
, 都指向你的云服务器 ip, 稍等一会, ping frp.xxx.net
, 如果能 ping 通说明解析成功.
配置 frpc
下载 frp 到本地, 解压
进入解压完成的目录, 修改 frpc.ini 为下:
[common]
# 公网 ip 就是 frps 所在的服务器的 ip
server_addr = xxx.xxx.xxx.xxx
# frps 规定的连接端口
server_port = 7000
# 连接 token 与 frps 中的 token
token = tPaALZKtCBfN6isP
# 定义第一个转发
[web01]
type = http
# 本地 (内网) 服务的端口
local_port = 8001
# 与 frps 中的 subdomain_host 连接起来就是 a.frp.xxx.net
subdomain = a
# 定义第二个转发
[web02]
type = http
# 本地 (内网) 服务的端口
local_port = 8002
# 与 frps 中的 subdomain_host 连接起来就是 b.frp.xxx.net
subdomain = b
然后启动:
./frpc -c ./frpc.ini
如果没有报错就是启动成功.
至此, 访问地址 a.frp.xxx.net:8080
会被转发到本地 (内网) 的 8001 端口, 而访问地址 b.frp.xxx.net:8080
会被转发到本地 (内网) 的 8002 端口.
配置 nginx
我们不想要 url a.frp.xxx.net:8080
这类似地址中的端口怎么办? 那只能使用默认端口 80 了, 这里可以用 nginx 进行转发, 首先在云服务器安装 nginx, 这个不再赘述, 网上有的是资料, 然后配置 nginx 的 conf 文件, 名字为 nginx.conf, 在 nginx 文件夹或者/etc/nginx 里面, 至于在哪, 取决于你用的什么安装方式, 此文件中添加一个 server 节点, 配置如下:
server {
# 监听的 80 端口
listen 80;
# 域名配置 记得一定要加上*.frp.xxx.net 这个, 只加 frp.xxx.net 是不行的, 某运维大坑张 XX 在这坑我 2 天的时间
server_name * .frp.xxx.net frp.xxx.net;
location / {
proxy_pass http: //127.0.0.1:8080;
# 这个 Host 的 header 一定要加, 不然转发后 frp 拿不到通过哪个域名访问的, 导致转发失败
proxy_set_header Host $host;
}
然后重启 nginx, 大功告成.
相关问题
客户端登录不上
2022/05/17 13:37:13 [E] [service.go:340] send Login request to plugin error
2022/05/17 13:37:13 [W] [service.go:128] login to server failed: send Login request to plugin error
frps.ini 中的 plugin 相关配置注释掉, 因为你没有启动插件, 所以 frps 连接不到插件, 就报错了.
#[plugin.user-manager]
#addr = 127.0.0.1:9000
#path = /handler
#ops = Login
#[plugin.port-manager]
#addr = 127.0.0.1:9001
#path = /handler
#ops = NewProxy
文章评论