nginx反向代理’/’的问题记录

2020-07-31 15:13:45 浏览数 (1)

问题记录

一个vue项目的前端,在登录时去请求另一个接口进行登录,请求时返回404,原因就是在请求www.a.com/forward/login/v1/doLogin?loginName=test&passWord=e10adc3这个地址时,没有转发到www.b.com/login/v1/doLogin?loginName=test&passWord=e10adc3,所以才会返回一个404

解决方法

一开始考虑使用rewrite直接改写请求到www.b.com/forward/login/v1/doLogin?loginName=test&passWord=e10adc3,但是发现会出现跨域问题

代码语言:javascript复制
location /forward/ {
        rewrite /forward/(.*) http://www.b.com/$1 last;
}

这样配置会出现跨域,代码里已经对跨域做好了跨域设置,所以直接使用proxy_pass进行转发就可以,下面是正确的写法

代码语言:javascript复制
    location /forward/ {
        proxy_pass https://www.b.com/;
    }

这种写法可以将原请求的虚拟路径给去掉,即不带请求地址,如下: 源请求: www.a.com/forward/login/v1/doLogin?loginName=test&passWord=e10adc3 转发后的请求: www.b.com/login/v1/doLogin?loginName=test&passWord=e10adc3

假如不带’/’ ,请求如下: 源请求: www.a.com/forward/login/v1/doLogin?loginName=test&passWord=e10adc3 转发后的请求: www.b.com/forward/login/v1/doLogin?loginName=test&passWord=e10adc3

下面再看下面两种转发方法:

代码语言:javascript复制
    location /forward/ {
        proxy_pass https://www.b.com/test/;
    }

源请求: www.a.com/forward/login/v1/doLogin?loginName=test&passWord=e10adc3 转发后的请求: www.b.com/forward/test/login/v1/doLogin?loginName=test&passWord=e10adc3

代码语言:javascript复制
    location /forward/ {
        proxy_pass https://www.b.com/test;
    }

源请求: www.a.com/forward/login/v1/doLogin?loginName=test&passWord=e10adc3 转发后的请求: www.b.com/forward/testlogin/v1/doLogin?loginName=test&passWord=e10adc3

0 人点赞