解决什么问题?
后台开发,需要debug。但是客户端访问的是域名,如何把在服务器上的域名(IP端口)映射到本地端口上?
这样的话,就很爽了。服务器上出现了问题,本地直接跑,直接就debug到信息了。
使用工具
使用开源frp frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
Github地址
如图所示,我是mac和linux服务器端,所以下载压缩文件后即可。
Nginx配置
server {
listen 80;
server_name domain.com; #自己的域名
location / {
proxy_pass http://127.0.0.1:30011; #记住这个端口,这是frpc映射过来的
proxy_connect_timeout 30s;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 32k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_redirect off;
proxy_hide_header Vary;
proxy_set_header Accept-Encoding '';
proxy_set_header Host $host;
proxy_set_header Referer $http_referer;
proxy_set_header Cookie $http_cookie;
proxy_set_header X-Real-IP $remote_addr;
}
}
Server具体配置
把frp_0.35.1_linux_386.tar.gz上传至Linux服务器
创建文件夹并且解压缩
mkdir frps
tar xzvf frp_0.35.1_linux_386.tar.gz
mv frp_0.35.1_linux_386 frps
配置Frps.ini文件
[common]
#内网穿透服务器监听的IP地址,可以省略,默认为127.0.0.1
bind_addr = 0.0.0.0
#服务器端监听的端口,默认是7000,自定义
bind_port = 7001
#token是用于安全验证,不加会导致任何机器穿透一定要加一个自己才知道的。
token = aaabbbccc
配置成系统服务
新建一个文件,名称是 auto_start.sh 放在frps目录下
里面的内容如下: 具体含义就是启动后台执行,这样关闭操作窗口后服务依旧存在
#!/usr/bin/env bash
nohup /root/frps/frps -c /root/frps/frps.ini &
接下来配置成系统服务,首先切换到这个目录下
cd /usr/lib/systemd/system
然后新建一个文件frps.service,内容如下,注意ExecStart换成自己的路径
[Unit]
Description=frps
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/root/frps/auto_start.sh
ExecStop=/bin/kill -s QUIT $MAINPID
ExecReload=/bin/kill -s HUP $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
然后执行命令
systemctl daemon-reload
此时查看frps状态和启动停止都可以操作了
systemctl start frps
systemctl status frps
systemctl stop frps
如果要把它设置成开机启动可以这样
设置开机启动
systemctl enable frps
关闭开机启动
systemctl disable frps
以上就实现了frp的Server端启动
Client端具体配置
来到自己的Mac电脑上,解压到任意目录下即可,然后切换到frp的目录下。
打开frpc.init配置信息如下:
[common]
#外网-服务器端ip 自己服务器的ip
server_addr = x.xxx.xx.xx
#外网-服务器端监听的端口(必须与Frps.ini中的配置一致)
server_port = 7001
#token要和服务器上保持一致
token = aaabbbccc
[remote_uu]
type = tcp
local_ip = 127.0.0.1
#本地开的端口
local_port = 8081
#frpc映射成的远端端口
remote_port = 30011
设置完后,要记得把端口7001
打开。我用的是阿里云,我在安全组里设置一下入方向
即可。默认所有出的方向是全部。
客户端启动命令
./frpc -c frpc.ini
再来看下现在frps现在监听的端口
netstat -npltu | grep frps
tcp6 0 0 :::7001 :::* LISTEN 25224/frps
tcp6 0 0 :::30011 :::* LISTEN 25224/frps
可以看到30011端口也开了,就是本地frpc映射到服务器上的30011端口
之后进行测试吧~!访问远端的域名就可以了!
最后简单画一下整个过程。