关于nginx中server拦截的路径,nginx是怎么请求转发的?

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情

前言

在项目中,有这样一个需求,由于项目部署在内网,所以项目中的文件上传不能采用第三方资源服务器上传的方式,像七牛云、oss等第三方文件上传的接口。所以,只能把服务器当作资源服务器,将文件上传上去。但是在访问的过程中,由于项目采用的是nginx请求转发,所以直接访问,无法访问到资源。

项目实施

在项目中,编写一套文件上传的代码,将文件以流的方式存储到服务器指定的目录下,并返回该文件上传后的路径,这个路径是通过项目获取完整的请求路径,包括:域名,端口,上下文访问路径等。

image.png 这里的path就是服务器上的资源路径,并配置了一个固定前缀"/profile"用来区分并过滤资源地址

image.png getDomain方法是serverConfig.getUrl中获取域名,端口,上下文路径的方法,与服务器上的资源路径path组成了文件的访问路径。如http://XXX/profile/upload/2022/04/13/ac1ffec5-9edd-44bf-bfd5-6623ded92431.jpg

由于前面说到,在路径中间,加了个固定前缀"/profile",所以需要在项目中过滤有该前缀的地址,重定向到资源目录: image.png 正常情况下,在没有nginx的时,这样就可以直接访问文件资源了,但是由于nginx配置的转发规则:

image.png 可以看到,前端请求的前缀并没有我们想要的,所以在nginx转发规则中加了资源访问转发的规则,这样就可以访问到了

思考

在nginx加入后,无论请求的地址是什么,都会先走nginx中的配置转发的规则,匹配到后再进行请求转发,才会到我们的项目代码中。所以,nginx算是客户端与服务端请求的第一步。

猜你喜欢

转载自juejin.im/post/7086317414253592606