proxy_pass 只是HOST,不可以包含任何路径

如果proxy_pass后面没有任何URL路径信息(比如//xxx等),则反向代理的地址会包含location中的匹配部分,否则只会拼接匹配后的剩余路径 PS: 上面是最重要且唯一的一条规则,请记住

多种情况验证

假设请求:http://localhost/online/wxapi/test/loginSwitch

第一种情况

1
2
3
4
5
proxy_pass`结尾有`/
location /online/wxapi/ {
proxy_pass http://localhost:8080/;
proxy_set_header X-Real-IP $remote_addr;
}

代理后的实际地址:http://localhost:8080/test/loginSwitch

第二种情况

1
2
3
4
5
proxy_pass`结尾没有`/
location /online/wxapi/ {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
}

代理后的实际地址:http://localhost:8080/online/wxapi/test/loginSwitch

第三种情况

1
2
3
4
5
proxy_pass`结尾有`/web
location /online/wxapi/ {
proxy_pass http://localhost:8080/web;
proxy_set_header X-Real-IP $remote_addr;
}

代理后的实际地址:http://localhost:8080/webtest/loginSwitch

注意:因为是拼接剩余部分,所以路径中可能有单个词的拼接,比如webtest

第四种情况

1
2
3
4
5
proxy_pass`结尾有`/web/
location /online/wxapi/ {
proxy_pass http://localhost:8080/web/;
proxy_set_header X-Real-IP $remote_addr;
}

代理后的实际地址:http://localhost:8080/web/test/loginSwitch

正则匹配location的情况, proxy_pass不允许以/结尾