上传文件请求绕过网关

一、问题描述

1.本例中,我需要请求上传文件微服务的接口,并且绕过Zuul网关。因为请求会携带图片。如果再通过网关的话,会非常浪费资源。

2.图片上传是文件的传输,如果也经过Zuul网关的代理,文件就会经过多次网路传输,造成不必要的网络负担。在高并发时,可能导致网络阻塞,Zuul网关不可用。这样整个系统就瘫痪了。所以文件上传需要绕过网关。

二、解决方案

1.Zuul的路由过滤

Zuul中提供了一个ignored-patterns属性,用来忽略不希望路由的URL路径,示例:

zuul.ignored-patterns: /upload/**

路径过滤会对一切微服务进行判定。

Zuul还提供了ignored-services属性,进行服务过滤:

zuul:
  ignored-services:
    - upload-service # 忽略upload-service服务,这种前面加  -  的是集合语法,可以配置多个

但是用这种方式,还是经过网关了。

2.使用Nginx绕过网关

#api.leyou.com
    server {                    
        listen       80;                #监听80端口
        server_name  api.leyou.com;         #监听域名,后台管理系统

        #图片上传,拦截/api/upload  的路径   ,重写成  /upload   ,代理到http://127.0.0.1:8082/upload/*
        location /api/upload {
            proxy_pass http://127.0.0.1:8082;	#反向代理
            proxy_connect_timeout 600;
            proxy_read_timeout 600;
            
            rewrite "^/api/(.*)$" /$1 break;    
                        # $1就是匹配前面的一组(小括号)
        }

        #网关
        location / {
            proxy_pass http://127.0.0.1:10010;
            proxy_connect_timeout 600;
            proxy_read_timeout 600;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

注意 location /   一定要在最下面,因为,nginx是按顺序过滤的。如果location在最上面,那所有进来的的请求,都走location /   了

前台请求路径是,http://api.leyou.com/api/upload/image

后台接口路径是,http://127.0.0.1:8082/upload/image

我们需要把api过滤掉,这就需要rewrite关键字了

rewrite关键字的使用

rewrite    "用来匹配路径的正则"    重写后的路径    [指令];

 

图中$1匹配的是前面正则表达式里的小括号里的内容,正则表达式里可以有多个小括号,后面可以用 $2  $3来按顺序匹配。

指令可以是  break    或     last

       last:重写路径结束后,将得到的路径重新进行一次路径匹配。也就是说,重写完路径,再一次在nginx过滤器里过滤一遍。

       break:重写路径结束后,不再重新匹配路径。 也就是说,不用再次过滤,直接代理到接口就行了。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值