假设一个场景:假设我开发了一套了博客系统,在我本地电脑里运行着,假设运行的端口是8080,那么我自己在本地浏览器访问http:localhost:8080 就可以访问自己的博客系统。但是假设我想外界访问我自己的系统,他们是无法访问到我电脑的应用,这是因为我电脑主机不是公网ip,DNS是无法解析到我的电脑上来,想必大家也清楚这一点。一般做法是,买一台云服务器,假设是买了一台阿里云的服务器,并且自己买了个域名,假设云服务器的公网ip是123.123.123.123 ,域名是www.myblog.com, 那么我们在域名解析那里将域名解析到公网ip上,然后将自己的应用打个包上传到阿里云服务器中运行,然后部署相关的运行环境,比如数据库,缓存等,然后运行在80端口,然后我们外界就可以访问www.myblog.com就可以访问到博客系统。这样做起来似乎没啥问题,但是其中需要做的部署工作量也是不小的,假设我只是将我系统演示给别人看,或者改点小功能或者部分代码,又要重新打包部署到服务器上,这样子看起比较麻烦。FRP就很方便简化这种常见,它能让我们无需将应用部署到云服务器中,让外界一样访问到我们本地应用,那样子对于开发者而言,在自己的IDE开发工具上,边修改代码,在本地运行后,外界访问同本地是一样的,那样子是不是很爽。
那什么是frp?frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透
frp的github网址:https://github.com/fatedier/frp
使用示例
假设以上述的博客系统为例(访问http://www.myblog.com就能访问本地电脑的博客网站)。
我们还是要准备一台能供外界访问的云服务器。
frp的版本信息:https://github.com/fatedier/frp/releases/ ,建议去该网站看看,目前更新到v0.30.0。假设云服务器的环境是linux-centos7环境:
一、登录到自己的云服务器,下载frp:
##下载最新版的frp_0.30.0_linux_amd64.tar.gz
wget --no-check-certificate https://github.com/fatedier/frp/releases/download/v0.30.0/frp_0.30.0_linux_amd64.tar.gz
##解压
tar -zxvf https://github.com/fatedier/frp/releases/download/v0.30.0/frp_0.30.0_linux_amd64.tar.gz
由于官网下载比较慢,如果是国内服务器访问下载会非常慢,如果快点,需要资源包,我可以帮你下,下好发给你。
解压之后,目录结构如下:
frp分为服务端和客户端,能被外网访问的云服务器需要安装frps,而我们本地电脑需要安装frpc
结构介绍:
frpc -- 是客户端的命令工具
frpc_full.ini -- 是客户端的详细配置文件
frpc.ini -- 客户端简单配置文件
frps -- 服务端的命令工具
frps_full.ini -- 是服务端的详细配置文件
frps.ini -- 服务端简单配置文件
LICENSE 版权协议信息,frp是开源的,遵守apache2.0开源协议
systemd 其实我们下载解压frp之后,就是一个可执行二进制程序,那么如需要开机自动启动或重启服务十分不方便,那么就可以借助systemd
于是了解以上信息,我们在云服务器上只需要配置frps端就可以,后面在自己本地电脑配置frpc端。
修改frps.ini文件
# /root/conf/frps.ini
[common]
#frps运行的端口
bind_port=7700
#自己随意设置,但服务端与客户端需要设置一致,相当于通信的口令,如果不设置token,其他客户端都可以连到#服务端,不安全
token=qadbjadjhjB213132
# 使用http协议 运行到80端口
vhost_http_port=80
#图形化监控工具,可以不设置
dashboard_port=7500
dashboard_user=admin
dashboard_pwd=ujfan19941103
然后执行 frps -c frps.ini 进行启动服务端
二、在自己本地下载frp,配置客户端
假设我们本地是window系统,那么在https://github.com/fatedier/frp/releases/ 找到window版本的frp,同样我们下载
然后解压后可以看到:
目录结构和linux一样的,在客户端我们只需要配置frpc.ini即可
# frpc.ini
[common]
# 你自己的云服务器的ip
server_addr = 123.123.123.123
# frps运行的端口,就是上面你设置的端口
server_port = 7700
# token口令,需要和上面设置的一致
token=qadbjadjhjB213132
[ssh]
# 使用http协议
type = http
# 默认即可
local_ip = 127.0.0.1
# 本地项目运行的端口
local_port = 80
# 域名
custom_domains = www.myblog.com
然后在cmd窗口执行:frpc.exe -c frpc.ini 进行启动,然后大功告成了,在浏览器访问www.myblog.com就可以访问到自己本地的博客系统。
frp的功能不仅如此,更多详细配置请参考官网文档:https://github.com/fatedier/frp/blob/master/README_zh.md