nginx反向代理遇到的问题
nginx反向代理遇到的问题
问题描述
在docker中安装了nginx,siyuan(思源),minio,最初通过nginx所在的docekr映射不同的端口,分别对思源和minio做了反向代理,都可以正常访问。后来我想通过同一个端口对不同的服务做反向代理,测试下了没有成功。(!!!都是一些个人学习过程中的东西,可能存在错误的地方!!!)
可以正常代理的配置
-
思源配置
-
minio的配置
想要的改成的样子(这样时失败的)
原因:通过location test进行测试,其实这里写的配置服务端是可以收到正确的路径请求的,但是为啥不行呢,因为第一个是我在浏览器中填入了xxx/siyuan的url,请求可以通过代理发送给正确的服务端,但请求获取的是一个web页面,页面中还包含了很多其他的资源,浏览器会再次项服务器请求这些资源,但是请求的url中path不是以siyuan开头的,这个和服务器的前端代码有关系,所以页面中的资源就会无法被代理,导致显出资源加载失败或者404的这个情况。当我把代码直接写道location / 下面的时候就和使用不同端口时一样可以正常工作了。
对nginx不是很熟悉,不知道有没有什么其他的版本解决这个问题。暂时先记录一下。
那这样子的代理还有什么意义呢?
- 当然有啊,但我们的服务是个单纯一个api服务时这样就没有问题了。比如上面minio的api部分时可以这样做的。
其他学习到的东西:
-
使用proxy_pass时结尾加/和不加时不一样的
location /test { proxy_pass http://192.168.2.106:8888; # 服务端收到的请求path中会带有/test }
location /test { rewrite ^/test(/.*) $1 break; # 和在proxy_pass中加了‘/’效果一样 proxy_pass http://192.168.2.106:8888; }
location /test { proxy_pass http://192.168.2.106:8888/; # 服务端收到的请求path中不会带有/test }
相关链接:
-
后来发现的一个和我遇到的问题差不多的帖子:
无法在nginx反向代理后面访问Minio控制台-腾讯云开发者社区-腾讯云 (tencent.com) -
minio官方的一个配置,官网的这个和我的说法不一致,我按照他的尝试了不行。请自行思考验证。
为 MinIO 服务器配置 NGINX 代理 — MinIO Object Storage for Linux