如何绕过网关进行文件的上传

为什么要绕过网关去上传文件?

因为我们所有的请求都要经过网关,假如有一天网关微服务出了问题,那么我们所有的文件都上传不了,所以我们上传文件可以绕过网关去上传。

我们该如何实现绕过网关去上传?

首先你要知道,我们从浏览器发送过来的地址,都是从nginx进行代理,然后转发给网关进行匹配微服务,如果我们绕过网关的话,只需要直接从nginx配置不经过网关的地址就可以了。

在这里插入图片描述
像这个地址,之前我们只配置了一个地址,就是访问网关的地址,让浏览器只能发送到网关里面,现在我们在上面增多一个地址,这个是可以访问到上传文件路径的地址,为了更精准一点,我们加上后面的后缀/api/load,因为只要你点击上传文件的话,他就会访问这个地址,你只需要加上这个后缀,他能去自动访问这个地址,然后由上传文件的微服务去截取,端口我们可以直接改成上传文件的微服务的端口,我们这一定义上传文件的微服务的端口是8082,所以转发到8082也就是转发到上传文件的微服务,然后再由上传文件的微服务的controller去截取/upload,就可以实现后面的操作。但是有一点需要注意的是,一定要注意把上传文件的配置写在网关配置的前面,也就是上图用红框圈起来的地方,这个顺序一定要注意,不然的话,路径会经过网关先,然后才会到上传文件路径,这样就会经过网关。

在这里插入图片描述

但是因为前端的原因,请求路径会自动加上api,然后这个是网关的api,虽然不是网关的端口,但是多了这个api,我们上传文件的微服务也没有办法访问到,所以我们要用到一个方法,nginx里面可以去重写路径。

怎么去重写路径呢?

在这里插入图片描述
我们可以看看这个方法,这个是我们重写的方法,这里用了正则表达式,以^开头,$结尾,第一个也就是api,表示的是需要修改的对象,然后第二个也就是(.)表示的是api后面的参数也就是/upload/image,然后用双引号括起来,这就是一个对象,我们需要获取的是1,这个1表达的是什么意思呢?就是你要求改的对象后面的一个参数比如(.)这个是代表什么上面已经说到了,也就是获取这些全部参数,这些也就是1,如果你加多几个(.*),那就可以选择二或者三。

写完之后我们还要做一个选择:
在这里插入图片描述
需要加这两个参数之中的一个,两者的区别就是进行一次路径匹配跟不匹配,如果进行一次路径匹配的话,我们上面的地址是没有api的,在nginx所有地址当中,都是带有api的,就连我们当前的这个地址,都是带api的,只是我们重写了而已,所以我们不能再重新进行一次路径匹配,只能不再重新匹配地址,选择第二个break。

在这里插入图片描述
在这里插入图片描述
最终结果把这后面的也去掉,所以我们最终访问8082这个上传文件的微服务,访问的时候顺便重写地址把api去掉,就可以正常访问微服务的controller。
在这里插入图片描述

在这里插入图片描述
最终结果。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值