需求场景
- 家里服务器上部署了一些服务,比如Web、Mysql或者ssh其他服务,但没有公网IP;
- 恰好有一台云服务器,有公网IP;
- 此时即可在云服务器上部署好frp服务端,再在本地服务器部署好frp客户端,即可在实现输入公网IP和指定端口访问内网的服务;
Frp资源下载
压缩包解压
root@chenge:/home/Pro/FRP# ls
frp_0.52.3_linux_amd64.tar.gz frp_0.52.3_linux_arm64.tar.gz
root@chenge:/home/Pro/FRP# tar -zxvf frp_0.52.3_linux_arm64.tar.gz && mv frp_0.52.3_linux_arm64 frp
root@chenge:/home/Pro/FRP# cd frp/
root@chenge:/home/Pro/FRP/frp# ls
frpc frpc.toml frps frps.toml LICENSE
服务端配置
服务端也就是你有公网IP的服务器需要配置
0.51以下的版本基本是以ini格式的配置文件,而0.51以上的版本支持yaml、json、toml格式的配置文件
本次资源以0.52.3版本为实例,配置文件使用的是默认的toml格式
- 服务端编辑 frps.toml 文件
# frp特定的监听端口,防火墙需要放开此端口,可以自定义,但是要与客户端一致
bindPort=7000
# 服务转发端口,外网所有请求都被转发到这里
vhostHTTPPort=7001
- 启动服务端
./frps -c ./frps.toml
客户端配置
- 客户端编辑 frpc.toml 文件
serverAddr = "47.10.13.02"
serverPort = 7000
[[proxies]]
name = "next-terminal"
type = "http"
localIP = "127.0.0.1"
localPort = 8088
remotePort = 7001
customDomains = ["terminal.chenge.com"]
[[proxies]]
name = "code-server"
type = "http"
localIP = "127.0.0.1"
localPort = 1314
remotePort = 7001
customDomains = ["vscode.chenge.com"]
我这里是部署了两个服务,都通过域名进行转发。
- 启动客户端
./frpc -c ./frpc.toml
附加功能
1.以systemctl工具管理服务实现进程维护
以服务端为例,客户端类似
配置service文件
vim /etc/systemd/system/frps.service
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/home/Pro/FRP/frp/frps -c /home/Pro/FRP/frp/frps.toml
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
更新配置文件
systemctl daemon-reload
以上代码中文件路径需更换自己的真实路径
systemctl维护命令
systemctl start frps
systemctl stop frps
systemctl restart frps
2.通过nginx配置在服务端配置反向代理
现在配置成功后,访问的两个服务的方式是
- terminal.chenge.com:7001
- vscode.chenge.com:7001
但是我想去掉端口号,则在nginx中加上反向代理即可
server {
# 监听nginx 80端口
listen 80;
# 域名配置
server_name terminal.chenge.com,vscode.chenge.online;
location / {
proxy_pass http://127.0.0.1:7001;
# 这个Host的header一定要加,不然转发后frp拿不到通过哪个域名访问的,导致转发失败
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
至此完美可以去掉端口号访问!
1 条评论
兄弟写的非常好 https://www.cscnn.com/