BaldHead`s Blog

绕过网关图片上传

参考图片上传和nginx代理图片访问

图片上传

https://www.cnblogs.com/TJ21/p/12609112.html

代理图片访问

https://www.cnblogs.com/TJ21/p/12609017.html

绕过网关图片上传方式:

绕过网关:直接访问图片上传微服务

 

我们这里的微服务的端口为 8082

注意:原则上,我们是不能把除了网关以外的服务对外暴露的,不安全。

 

 采取nginx从写访问路径的方绕过网关直接访问图片上传微服务

nginx配置路径重写

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

完整代码

 1 server {
 2         listen       80;
 3         server_name  api.leyou.com;
 4 
 5         #charset koi8-r;
 6 
 7         #access_log  logs/host.access.log  main;
 8 
 9         # 上传路径的映射
10         # 小括号代表分组  用$+上组的编号获取分组里的值
11         
12         location /api/upload {    
13             proxy_pass http://127.0.0.1:8082;
14             proxy_connect_timeout 600;
15             proxy_read_timeout 600;
16             
17             rewrite "^/api/(.*)$" /$1 break; 
18         }
19 
20         
21         location / {
22             # 代理的地址以及端口号
23             proxy_pass http://127.0.0.1:10010;
24             # 连接超时时间
25             proxy_connect_timeout 600;
26             # 读取超时时间
27             proxy_read_timeout 600;
28                 root   html;
29                 index  index.html index.htm;
30                     }
31         }
View Code
- 首先,我们映射路径是/api/upload,而下面一个映射路径是 / ,根据最长路径匹配原则,/api/upload优先级更高。也就是说,凡是以/api/upload开头的路径,都会被第一个配置处理

- `proxy_pass`:反向代理,这次我们代理到8082端口,也就是upload-service服务

- `rewrite "^/api/(.*)$" /$1 break`,路径重写:

  - `"^/api/(.*)$"`:匹配路径的正则表达式,用了分组语法,把`/api/`以后的所有部分当做1组

  - `/$1`:重写的目标路径,这里用$1引用前面正则表达式匹配到的分组(组编号从1开始),即`/api/`后面的所有。这样新的路径就是除去`/api/`以外的所有,就达到了去除`/api`前缀的目的

  - `break`:指令,常用的有2个,分别是:last、break

    - last:重写路径结束后,将得到的路径重新进行一次路径匹配
    - break:重写路径结束后,不再重新匹配路径。

    我们这里不能选择last,否则以新的路径/upload/image来匹配,就不会被正确的匹配到8082端口了

修改完成,输入`nginx -s reload`命令重新加载配置。然后再次上传试试

 

posted @ 2020-04-01 18:10  BaldHead  阅读(479)  评论(0编辑  收藏  举报