需求场景

  1. 家里服务器上部署了一些服务,比如Web、Mysql或者ssh其他服务,但没有公网IP;
  2. 恰好有一台云服务器,有公网IP;
  3. 此时即可在云服务器上部署好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格式

  1. 服务端编辑 frps.toml 文件
# frp特定的监听端口,防火墙需要放开此端口,可以自定义,但是要与客户端一致
bindPort=7000
# 服务转发端口,外网所有请求都被转发到这里
vhostHTTPPort=7001
  1. 启动服务端
./frps -c ./frps.toml

客户端配置

  1. 客户端编辑 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"]

我这里是部署了两个服务,都通过域名进行转发。

  1. 启动客户端
./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;
    }
}

至此完美可以去掉端口号访问!

最后修改:2023 年 12 月 10 日
做兄弟、在心中!