搭建frp+nginx实现内网穿透访问内网系统

搭建frp+nginx实现内网穿透访问内网系统

Scroll Down

内网穿透就是把内网的应用映射到外网,然后再外网任何地方都可以访问。通常要实现这些功能,我们首选花生壳,但是花生壳是收费的,而且有各种限制。之前公司在内网映射我买了花生壳盒子,只能建立两个映射,流量有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上传至服务器

进入页面下载 1.png

上传至服务器,然后解压查出来。

2.png

解压出的文件。

image.png

文件说明

  • frpc:客户端可执行程序

  • frpc_full.ini:客户端所有配置项(可以再此文件查看frp的所有的配置项)

  • frpc.ini:客户端配置项

  • frps:服务端可执行程序

  • frps_full.ini:服务端所有配置项(可以再此文件查看frp的所有的配置项)

  • frps.ini:服务端配置项

  • LICENSE:许可证

  • 服务端只需要编辑frps.ini文件

  • 客户端只需要编辑frpc.ini文件

备注:

  1. 在上面可以看到,下载过程我没有采用服务器使用wget的方式直接下载,那是因为现在的github越来越不友好了,速度是越来越慢了,有时候甚至打不开了!
  2. 在上传文件后,在服务端我会把frpc客户端的文件删掉,反之客户端删除frps,个人习惯。

2.配置服务端

在配置服务端的时候,如果有啥问题可以直接参照项目地址的文档配置,里面描述的很详细!

配置的服务端frps.ini文件就行了。

[common]
bind_port = 7000
vhost_http_port = 8001
subdomain_host = 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.png

看到上面画面,服务端就证明已经启动成功了!

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 &

启动后 服务端截图:

4.png

系统监听启动正常,和客户端已经正常连接。

客户端:

5.png

上面显示frp已经没有问题,使用[二级域名+端口]已经可以正常访问。

4.配置nginx反向代理

使用nginx反向代理的思路,就是做个端口转换。将现有的[二级域名+8001]转换为[二级域名+80].

具体nginx.conf配置:

server
{
    listen 80;
    server_name zabbx.cn;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/a.zabbx.cn;
    
    location / {
        proxy_pass http://a.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;
        }

测试一下:

6.png

这样教程就完了,最后的使用效果跟你自己的服务器带宽有很大关系。越大越好!