nginx的proxy_pass后面是否带/的区别总结
分为以下几种情况:
1、代理的url地址中带有URI
2、代理的url地址不带有URI
然后针对上面的两种情况,我们分别再来仔细演示其中location带有/和不带/的区别
1、代理的url地址中带有URI
一、location匹配路径末尾没有 /
location /sta
{
proxy_pass http://192.168.1.1/sta;
}
外面访问:http://外网IP/sta/sta1.html
相当于访问:http://192.168.1.1/sta/sta1.html
location /sta/ # 后面带有/
{
proxy_pass http://192.168.1.1/sta;
}
外面访问:http://外网IP/sta/sta1.html
相当于访问:http://192.168.1.1/sta/sta1.html
所以说这两种设置效果都是一样的
二、location匹配路径末尾有 /
此时proxy_pass后面的路径需要分为以下四种情况讨论:
(1)proxy_pass后面的路径只有域名且最后没有 /
location /sta/
{
proxy_pass http://192.168.1.1;
}
外面访问:http://外网IP/sta/sta1.html
相当于访问:http://192.168.1.1/sta/sta1.html
(2)proxy_pass后面的路径只有域名同时最后有 /
location /sta/
{
proxy_pass http://192.168.1.1/;
}
外面访问:http://外网IP/sta/sta1.html
相当于访问:http://192.168.1.1/sta1.html
(3)proxy_pass后面的路径还有其他路径但是最后没有 /:
location /sta/
{
proxy_pass http://192.168.1.1/abc;
}
外面访问:http://外网IP/sta/sta1.html
相当于访问:http://192.168.1.1/abcsta1.html
(4)proxy_pass后面的路径还有其他路径同时最后有 /:
location /sta/
{
proxy_pass http://192.168.1.1/abc/;
}
外面访问:http://外网IP/sta/sta1.html
相当于访问:http://192.168.1.1/abc/sta1.html
2、代理的url地址不带有URI
location /test_app {
proxy_pass host:8080/; #有斜杠,代理到:host:8080/a.html
}
location /test_app {
proxy_pass host:8080;#无斜杠,代理到:host:8080/test_app/a.html
}