目前Nginx主要是用作反向代理,但是最近在配置
proxy_pass
的时候遇到过一些问题,实验后发现多种复杂的规则背后其实本质只有一条规则
重要规律
看了一些文章后,总结的规则
如果proxy_pass
后面没有任何URL路径信息(比如/
,/xxx
等),则反向代理的地址会包含location
中的匹配部分,否则只会拼接匹配后的剩余路径
PS: 上面是最重要且唯一的一条规则,请记住
多种情况验证
假设请求:http://localhost/online/wxapi/test/loginSwitch
第一种情况
proxy_pass
结尾有/
location /online/wxapi/ {
proxy_pass http://localhost:8080/;
proxy_set_header X-Real-IP $remote_addr;
}
代理后的实际地址:http://localhost:8080/test/loginSwitch
第二种情况
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
第三种情况
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
第四种情况
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