- 官网下载frp: https://github.com/fatedier/frp/releases 找到对应的服务端和客户端。
- 解压后,外网有固定ip的服务器上,打开frps.ini修改对应参数,如:
123456789[common]bind_port = 7000vhost_http_port = 80token = frp_passwddashboard_port = 8998dashboard_user = frpdashboard_pwd = frp_passwdmax_pool_count = 100bind_addr = xxx.xxx.xxx.xxx
用浏览器打开xxx.xxx.xxx.xxx:8998就可以打开frps的dashboard, 可以看到frps服务器的一些状态。 - 内网要穿透出去的机器,如内网里一台树莓派上,同样下载对应frp版本,打开frpc.ini文件按下面内容相应修改,[ssh_pi]是自已取的名字,每加一个穿透加一下配置
12345678910111213141516[common]server_addr = xxx.xxx.xxx.xxxserver_port = 7000token = frp_passwdlogin_fail_exit = false[ssh_pi]type = tcplocal_ip = 127.0.0.1local_port = 22remote_port = 6000[web_pi]type = httpcustom_domains = xxx.my_site.comlocal_port = 80
其中[common]中login_fail_exit = false, 这样连接服务器失败的时候就不会退出,而是每隔30s尝试连接一次,以增加服务的稳定性, 之前一直开机启动不了,报错:frpc.service: Start request repeated too quickly. 加了这行后就开机启动成功了。
[web_pi]下custom_domains = xxx.my_site.com, 里设置了一个二级域名,相应的要到域名解析网上添加一个my_site.com的二级域名xxx的A记录,解析到上面的外网有固定ip的服务器的IP上。
4. 接着,用systemd 来设置开机启动,成为服务一直运行(有出错重启功能):
1. 把frpc文件复制到/usr/local/bin/下面
2.在/etc/文件夹下创建frp文件夹,并把frpc.ini文件复制到/etc/frp/下面
3.创建文件/usr/lib/systemd/system/frpc.service, 写入以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[Unit] Description=frpc After=network.target Wants=network.target [Service] TimeoutStartSec=30 ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.ini ExecStop=/bin/kill $MAINPID Restart=always [Install] WantedBy=multi-user.target |
运行命令:
sudo systemctl daemon-reload
sudo systemctl enable frpc
sudo systemctl start frpc
查看是否运行成功:
sudo systemctl status frpc
重启服务:
sudo systemctl restart frpc
frps服务端开机启动和客户端类似,把frpc改为frps就可以了。
frp与nginx共存
通常我们的公网服务器已经部署了其他网站,我们需要将frp与我们的nginx共存,这一点可以通过反代本地端口实现
编辑nginx的conf文件
1 2 |
cd /usr/local/nginx/conf/vhost/ vi frp.xxx.com.conf |
代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
server { listen 80; #listen [::]:80; server_name frp.xxx.com ; location / { proxy_pass http://127.0.0.1:8090; proxy_set_header Host $host:80; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; proxy_hide_header X-Powered-By; } access_log off; } |
nginx reload
通过上述配置之后我们可以直接通过80端口访问web,即
这里对systemd的讲的比较请楚:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html