frp 和 nginx 搭建一个内网穿透服务器(穿透校园网)

项目场景:

记录:最近在做的科大商城项目时,想用nginx做反向代理给宿舍笔记本电脑上的微服务,但是发现自己的腾讯云服务器ping不通宿舍的电脑


问题描述:

因为科大商场的微服务端用得上宿舍的笔记本电脑,宿舍得到的 IP 地址是校园网的私有 IP 地址,所有无法在公网上直接ping通。

在这里插入图片描述

解决方案:

使用 frp 配合 nginx 搭建一个内网穿透服务器

1. 腾讯云(CentOs 7)Server端

将下载好的frp拷贝到 /usr/local/ 目录下
在这里插入图片描述

接着,进入到 frp_0.34.2_linux_amd64 目录下,编辑frps.ini文件:

[common]
#服务端需要开启的端口(与客户端绑定的进行通信的端口)
bind_port = 7000
#服务端需要开启的端口(访问客户端web服务自定义的端口号,即Http监听的端口)
vhost_http_port = 8081
#授权令牌,需要客户端的auth_token保持一致
auth_token = websong

type = http
custom_domains = kedamall.com
auth_token = websong

接着需要设置目录下 frps 的权限为可读可写可执行,否则会报错:-bash: ./xx.sh: Permission denied

chmod 777 frps

最后,启动 frps 服务:

./frps -c ./frps.ini

成功:

在这里插入图片描述

2. Windows校园网下的Client端

编辑 frpc.ini 文件:

[common]
[common]
# 云服务器公网ip
server_addr = xxx.xxx.xxx.xxx

#客户端需要开启的端口(与服务器绑定的进行通信的端口)
server_port = 7000
auth_token = websong

[web6]
type = http
# 要穿透访问客户端机的10000端口
local_port = 10000

custom_domains =kedamall.com

接着,启动cmd命令行窗口,切换到frp目录下,运行:

frpc.exe

3. 穿透成功

在windows客户端机器的浏览器输入 kedamall.com:8081即可访问到windows客户端机器的10000端口的product服务啦!

但这不是我想要的最终结果,我们需要在输入kedamall.com即80端口下访问,这就需要用到nginx。我之前在云服务器上以及用docker装好了nginx,并将目录挂在到了/mydata/nginx下,于是我们编辑 /conf/conf.d/kedamall.conf文件:

server {
    listen       80;
    server_name  kedamall.com;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
    # 这里一定要写云服务器的内网ip
    # 含义是:当我们访问 kedamall.com的80端口的时候
    # 会被转发到172.27.0.12:8081
    
	proxy_pass  http://172.27.0.12:8081;
		#nginx在代理给网关的时候,默认会丢掉例如Host等的信息
		#因此需要如下设置:
        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;
    }

重启nginx服务:

docker restart nginx

成功:
在这里插入图片描述

4. nginx代理给网关

最终,我们想要nginx转发反向代理给(多个)网关,由网关从 Nacos 注册中心中 发现其他的微服务群并负载均衡的转发;因此我们需要修改 nginx 的根配置文件 nginx.conf,将upstream映射到我们的网关服务:

upstream kedamall{
	server 172.27.0.12:8081; 
}

接下来,我们修改 nginx 的 server 块配置文件 kedamall.conf,将以/开头的请求转发至我们配好的gulimall的upstream,由于nginx的转发会丢失host头,所以我们添加头信息

location / {
        proxy_pass http://kedamall;
        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;
}

最后,我们配置网关服务,将域名为**.gulimall.com转发至商品服务

- id: gulimall_host
  uri: lb://kedamall-product
  predicates:
  	- Host=**.kedamall.com

于是,在我们项目中,无论请求接口还是请求页面,基准路径都只写gulimall.com,由 nginx 直接代理给网关,最后由网关判断:

  • 如果/api/**,则转交给对应的服务器
  • 如果是满足域名(Host),则转交给对应的服务

最后贴一个完整的Fprc端的.ini配置文件:

[common]
server_addr = 132.232.15.2
server_port = 7000
auth_token = websong

[web6]
type = http
local_port = 88
custom_domains =kedamall.com

[web7]
type = http
local_port = 88
custom_domains =search.kedamall.com

[web8]
type = http
local_port = 88
custom_domains =item.kedamall.com

[web9]
type = http
local_port = 88
custom_domains =auth.kedamall.com

[web10]
type = http
local_port = 88
custom_domains =cart.kedamall.com

[web11]
type = http
local_port = 88
custom_domains =order.kedamall.com

[web12]
type = http
local_port = 88
custom_domains =member.kedamall.com

[web13]
type = http
local_port = 88
custom_domains =seckill.kedamall.com
  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值