frp 和 nginx 搭建一个内网穿透服务器
相关资料
下载
下载地址:https://github.com/fatedier/frp/releases
选择对应的版本进行下载
1 | wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_386.tar.gz |
Shell
Copy
如果是windows需要下载windos版本
1 | wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_darwin_amd64.tar.gz |
PHP
Copy
下载后、我的服务端是centos 客户端是windows
服务端需要关注的文件是 frps、frps.ini
客户端需要关注的文件是 frpc(或者是frpc.exe)、frpc.ini
注意,如果运行的环境是windows就要运行windows版本的,也就是exe后缀的
配置服务端
配置文件
1 | # frps.ini |
配置文件说明
- bind_port
服务端需要开启的端口 - vhost_http_port
服务端需要开启的端口 - auth_token
需要客户端的auth_token与此一样 - type
其实除了http还有其他参数,比如tcp,这里只讲述http,其他的请看相关文档: https://github.com/fatedier/frp - custom_domains
域名
具体接下来在配置客户端说明
启动服务
正常启动,ctrl+c能推出
1 | ./frps -c ./frps.ini |
后台启动
1 | nohup ./frps -c ./frps.ini & |
如果有兴趣,更可以设置成开机启动(这里不讲述)
配置客户端
配置文件
1 | # frpc.ini |
配置文件讲解
server_addr
对应服务器ip ,server_port
与服务端配置bind_port一样auth_token
与服务端配置auth_token一样[web6]
这个是唯一的,假如在另外一个客户端用了web6将会报明显的错误local_port
此端口,假如是80,那就是访问客户端机器的80端口custom_domains
域名 这里重点说一下,这个参数可以填的域名有
1
2abc.baidu.com
*.abc.baidu.com但是,这些域名都是需要解析到服务器ip的
*.abc.baidu.com 这里就需要使用到域名泛解析
具体百度即可
客户端启动
1 | ./frpc -c ./frpc.ini |
windows
1 | ./frpc.exe -c ./frpc.ini |
后台启动前面加 nohup 跟服务端一样
1 | nohup ./frpc.exe -c ./frpc.ini |
穿透成功
启动网站
如果以上服务端启动,客户端启动都没问题的话
以客户端的配置的域名:custom_domains
和 服务端配置的端口vhost_http_port在浏览器打开即可
也就是 b.abc.baidu.com:8081
其实这些就相当于访问你客户端本机的
127.0.0.1:80 或者localhost:80,
这个80端口是客户端配置文件的的local_port至此内网穿透完成
但是
- 但是刚刚有没有发现,访问的是带端口的网址,b.abc.baidu.com:8081
- 如果不想带端口呢,浏览器的默认端口是80,也就是说,我把服务端vhost_http_port,配置成80就好了,当然这样能解决
- 但是如果服务器有其他程序占用80端口呢,比如nginx,总不能把nginx换成其他端口吧,那我的博客www.blog.com就因为这个得改成www.blog.com:9090 假设改成9090,所以肯定有办法公用的
- 办法就是,我们可以利用nginx的反向代理就能完成,请接下来往下看 配置nginx
配置nginx
配置文件
1 | server{ |
说明
如配置文件所属
本来是需要访问 http://b.abc.baidu.com:8081 的
nginx使用了泛域名配置,*.abc.baidu.com (你自己的域名肯定不一样)
1
server_name *.abc.baidu.com;
反向代理配置
1
proxy_pass http://48.104.176.184:8081;
ip是服务端的ip,端口是服务端配置vhost_http_port 8081
至于nginx的其他参数,跟平常大多数nginx配置网站参数一样
这里使用到了nginx泛域名解析,和反向代理
完成打开网站
如果客户端配置的custom_domains是b.abc.baidu.com
在浏览器输入 b.abc.baidu.com ,就不用带端口号8081 ,应为已经被nginx反向代理了;
这样做的好处是
- 使用的时候直接在浏览器输入域名就可以,不用输入端口,用户也不用知道服务端的vhost_http_port 端口是什么,
- 让服务器其他网站的端口可以不用改;