nginx反向代理遇到的问题

nginx反向代理遇到的问题

问题描述

在docker中安装了nginx,siyuan(思源),minio,最初通过nginx所在的docekr映射不同的端口,分别对思源和minio做了反向代理,都可以正常访问。后来我想通过同一个端口对不同的服务做反向代理,测试下了没有成功。(!!!都是一些个人学习过程中的东西,可能存在错误的地方!!!)

可以正常代理的配置

  1. 思源配置
    image

  2. minio的配置
    image

想要的改成的样子(这样时失败的)

原因:通过location test进行测试,其实这里写的配置服务端是可以收到正确的路径请求的,但是为啥不行呢,因为第一个是我在浏览器中填入了xxx/siyuan的url,请求可以通过代理发送给正确的服务端,但请求获取的是一个web页面,页面中还包含了很多其他的资源,浏览器会再次项服务器请求这些资源,但是请求的url中path不是以siyuan开头的,这个和服务器的前端代码有关系,所以页面中的资源就会无法被代理,导致显出资源加载失败或者404的这个情况。当我把代码直接写道location / 下面的时候就和使用不同端口时一样可以正常工作了。

对nginx不是很熟悉,不知道有没有什么其他的版本解决这个问题。暂时先记录一下。

image

那这样子的代理还有什么意义呢?

  1. 当然有啊,但我们的服务是个单纯一个api服务时这样就没有问题了。比如上面minio的api部分时可以这样做的。

其他学习到的东西:

  1. 使用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
    }
    

相关链接:

  1. 后来发现的一个和我遇到的问题差不多的帖子:
    无法在nginx反向代理后面访问Minio控制台-腾讯云开发者社区-腾讯云 (tencent.com)

  2. minio官方的一个配置,官网的这个和我的说法不一致,我按照他的尝试了不行。请自行思考验证。
    为 MinIO 服务器配置 NGINX 代理 — MinIO Object Storage for Linux

posted @ 2023-10-06 16:19  周文靖  阅读(114)  评论(0编辑  收藏  举报