通过frp在内网PC部署web应用和VPS内网穿透
实验环境
- 内网电脑-Windows 10
- 外网服务器-Vultr Ubuntu 19.10-x64
frp介绍和安装
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。本次实验使用的frp版本是最新版本v0.31.1。
下载地址:frp Github
Windows版本安装
- 下载win64版本的压缩包:Win-x64
- 解压缩到电脑中的文件夹中:我是放在G:\projects\frp文件夹中。文件结构如下:
Linux版本安装 - 下载linux-x64版本的压缩包。
- 创建frp文件夹:mkdir frp
- 进入文件夹:cd frp,并下载压缩包:
wget https://github.com/fatedier/frp/releases/download/v0.31.1/frp_0.31.1_linux_amd64.tar.gz
- 解压缩frp压缩包
tar -zxvf frp_0.31.1_linux_amd64.tar.gz
- 通过ll命令查看linux下的文件夹:
frp配置和使用
我们看到有frpc,frpc_full.ini,frpc.ini以及 frps,frps_fill.ini, frps.ini这几个文件
如果是作为客户端,那么配置frpc.ini文件,如果是作为反向代理的服务端则使用frps.ini文件。这个实验中,我们用vultr的VPS作为外网服务器,提供反向代理服务。
修改frps.ini文件:
[common]
bind_port = 7000 #与客户端绑定的进行通信的端口
vhost_http_port = 8080 #访问客户端web服务自定义的端口号
保存文件并启动
- 直接启动:
./frps -c ./frps.ini,
- 后台启动:
nohup ./frps -c ./frps.ini &
启动以后,frp作为服务端就在工作了,开始监听7000端口的请求,并转发到响应的内网服务器上。
我的内网服务器是我直接的测试PC,为了测试http内网穿透的功能。配置了一个最简单的Django网站,并使用了8199这个端口,当然也可以部署其他的web应用,这里只是做一个示例,具体的配置就不详细展开了。
下面我们来配置frpc.ini这个文件,直接打开文本编辑器,然后打开frpc.ini文件:
[common]
server_addr = 45.77.xxx.xxx
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[web]
type = http
local_port = 8199
custom_domains = test.xxx123.com
然后在在命令行模式启动frpc.exe, 这里只是一个示范,在实际的应用中并不建议运行在windows上。请注意设置域名的解析到服务器IP上,然后访问 http://test.xxx123.com,发现网站可以正常打开,到此已经完成了基本的设置。
性能的考虑:
我们有时候使用的穿透用反向代理服务器有可能是在境外,我的实验机就是用的Vultr的VPS,所以会出现大量的丢包和延迟现象,frp支持kcp协议,能够大大改善这种情况,是访问速度明显提升。在服务器端配置kcp端口
# frps.ini
[common]
bind_port = 7000
# kcp 绑定的是 udp 端口,可以和 bind_port 一样
kcp_bind_port = 7000
同时可以在客户端开启kcp协议:
# frpc.ini
[common]
server_addr = x.x.x.x
# server_port 指定为 frps 的 kcp_bind_port
server_port = 7000
protocol = kcp
负载均衡
可以将多个相同类型的 proxy 加入到同一个 group 中,从而实现负载均衡的功能。
目前只支持 TCP 和 HTTP 类型的 proxy。
# frpc.ini
[test1]
type = tcp
local_port = 8080
remote_port = 80
group = web
group_key = 123
[test2]
type = tcp
local_port = 8081
remote_port = 80
group = web
group_key = 123
用户连接 frps 服务器的 80 端口,frps 会将接收到的用户连接随机分发给其中一个存活的 proxy。这样可以在一台 frpc 机器挂掉后仍然有其他节点能够提供服务。
TCP 类型代理要求 group_key 相同,做权限验证,且 remote_port 相同。
HTTP 类型代理要求 group_key, custom_domains 或 subdomain 和 locations 相同
作者:Rocky Yang
出处:http://www.cnblogs.com/yangjian2006/
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。感谢各位能够访问我的博客!
Email:Rocky的邮箱
个人博客:Rocky & Sky IT技术和管理