- Published on
frp 和 nginx 搭建一个内网穿透服务器
- Authors
- Name
- 套路猿
文章博客地址: https://blog.taoluyuan.com/posts/frp-server/
相关资料
下载
下载地址:https://github.com/fatedier/frp/releases 选择对应的版本进行下载
wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_386.tar.gz
如果是windows需要下载windos版本
wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_darwin_amd64.tar.gz
下载后、我的服务端是centos 客户端是windows
服务端需要关注的文件是 frps、frps.ini 客户端需要关注的文件是 frpc(或者是frpc.exe)、frpc.ini
注意,如果运行的环境是windows就要运行windows版本的,也就是exe后缀的
配置服务端
配置文件
frps.ini
[common]
#服务端需要开启的端口(与客户端绑定的进行通信的端口)
bind_port = 7000
#服务端需要开启的端口(访问客户端web服务自定义的端口号)
vhost_http_port = 8081
auth_token = websong
type = http
custom_domains = abc.baidu.com
auth_token = websong
配置文件说明
- bind_port 服务端需要开启的端口
- vhost_http_port
服务端需要开启的端口 - auth_token 需要客户端的auth_token与此一样
- type 其实除了http还有其他参数,比如tcp,这里只讲述http,其他的请看相关文档: https://github.com/fatedier/frp
- custom_domains 域名
具体接下来在配置客户端说明
启动服务
正常启动,ctrl+c能推出
./frps -c ./frps.ini
后台启动
nohup ./frps -c ./frps.ini &
如果有兴趣,更可以设置成开机启动(这里不讲述)
配置客户端
配置文件
# frpc.ini
[common]
server_addr = 48.104.176.184
server_port = 7000
auth_token = websong
[web6]
type = http
local_port = 80
custom_domains =b.abc.baidu.com
配置文件讲解
- server_addr 对应服务器ip ,
- server_port 与服务端配置bind_port一样
- auth_token 与服务端配置auth_token一样
- [web6] 这个是唯一的,假如在另外一个客户端用了web6将会报明显的错误
- local_port 此端口,假如是80,那就是访问客户端机器的80端口
- custom_domains 域名 这里重点说一下,这个参数可以填的域名有但是,这些域名都是需要解析到服务器ip的 *.abc.baidu.com 这里就需要使用到域名泛解析 具体百度即可
abc.baidu.com *.abc.baidu.com
客户端启动
./frpc -c ./frpc.ini
windows
./frpc.exe -c ./frpc.ini
后台启动前面加 nohup 跟服务端一样
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
原文地址:http://www.taoluyuan.com/index.php/archives/42/
配置nginx
配置文件
server{
listen 80;
server_name *.abc.baidu.com;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/abc/;
location /
{
proxy_pass http://48.104.176.184:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
}
}
###说明
如配置文件所属
- 本来是需要访问 http://b.abc.baidu.com:8081 的
- nginx使用了泛域名配置,*.abc.baidu.com (你自己的域名肯定不一样)
server_name *.abc.baidu.com;
- 反向代理配置
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 端口是什么,
- 让服务器其他网站的端口可以不用改;