内网穿透就是把内网的应用映射到外网,然后再外网任何地方都可以访问。通常要实现这些功能,我们首选花生壳,但是花生壳是收费的,而且有各种限制。之前公司在内网映射我买了花生壳盒子,只能建立两个映射,流量有2G的限制,如果在增加就需要升级配置按年收费了。
那么你愿意交费吗?反正我是不愿意!下来就开始正题了!
使用frp搭建免费的内网穿透
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。
项目地址:https://github.com/fatedier/frp/blob/master/README_zh.md
下载地址:https://github.com/fatedier/frp/releases
搭建环境
公司的服务器centos7部署了一个设备系统,需要映射到外网。外网是一台阿里云的centos7的系统,有公网地址和域名。需要使用域名的二级域名映射到内网系统上。域名映射我已经建立好了,可以直接使用。阿里服务器因为部署有其他应用80端口已经占用,但是我又不想使用[域名+端口号]的方式访问,因此需要用到nginx反向代理。
1.下载frp上传至服务器
进入页面下载
上传至服务器,然后解压查出来。
解压出的文件。
文件说明:
-
frpc:客户端可执行程序
-
frpc_full.ini:客户端所有配置项(可以再此文件查看frp的所有的配置项)
-
frpc.ini:客户端配置项
-
frps:服务端可执行程序
-
frps_full.ini:服务端所有配置项(可以再此文件查看frp的所有的配置项)
-
frps.ini:服务端配置项
-
LICENSE:许可证
-
服务端只需要编辑frps.ini文件
-
客户端只需要编辑frpc.ini文件
备注:
- 在上面可以看到,下载过程我没有采用服务器使用wget的方式直接下载,那是因为现在的github越来越不友好了,速度是越来越慢了,有时候甚至打不开了!
- 在上传文件后,在服务端我会把frpc客户端的文件删掉,反之客户端删除frps,个人习惯。
2.配置服务端
在配置服务端的时候,如果有啥问题可以直接参照项目地址的文档配置,里面描述的很详细!
配置的服务端frps.ini文件就行了。
[common]
bind_port = 7000
vhost_http_port = 8001
subdomain_host = www.zabbx.cn
bind_port :默认frps.ini就只有这一个属性,bind_port主要作用在于服务端和客户端进行通信,默认也是7000.在使用阿里云的时候要注意,在安全组放行7000端口。 vhost_http_port:http的监听端口设置。 subdomain_host:设置根域名。
- 服务端的subdomain_host和客户端的subdomian参数是搭配使用的。只需要将 *. 解析到 frps 所在服务器。之后用户可以通过 subdomain 自行指定自己的 web 服务所需要使用的二级域名,通过 . 来访问自己的 web 服务。
配置完成,就可以启动了
./frps -c ./frps.ini #注意配置文件路径。
但是我们是需要程序在后台运行,并且创建运行日志。
nohup ./frps -c ./frps.ini > file.log 2>&1 &
看到上面画面,服务端就证明已经启动成功了!
3.配置客户端
配置客户端同样需要配置frpc.ini文件。
[common]
server_addr = XXX.XXX.XXX.XXX #你自己的外网服务器地址
server_port = 7000 #必须和服务端的相同
[web]
type = http #连接类型
local_port = 80 #本地端口
subdomain = a #二级域名
同样配置完成,就可以启动了,命令也是一样的服务端是frps 客户端是frpc。
./frpc -c ./frpc.ini #注意配置文件路径。
但是我们是需要程序在后台运行,并且创建运行日志。
nohup ./frpc -c ./frpc.ini > file.log 2>&1 &
启动后 服务端截图:
系统监听启动正常,和客户端已经正常连接。
客户端:
上面显示frp已经没有问题,使用[二级域名+端口]已经可以正常访问。
4.配置nginx反向代理
使用nginx反向代理的思路,就是做个端口转换。将现有的[二级域名+8001]转换为[二级域名+80].
具体nginx.conf配置:
server
{
listen 80;
server_name www.zabbx.cn;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/a.www.zabbx.cn;
location / {
proxy_pass http://a.www.zabbx.cn:8001/; #反向代理地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_max_temp_file_size 0;
proxy_redirect off;
proxy_read_timeout 240s;
}
测试一下:
这样教程就完了,最后的使用效果跟你自己的服务器带宽有很大关系。越大越好!
评论区