nginx反向代理加/和不加/的区别
nginx反向代理的时候加/
和不加/
区别很大,情况也有很多种,容易忘记记混,这里记录一些情况
注意:首先需要弄清楚URL和URI的区别。
URL:就是访问网址时的全路径。URL=协议://IP或域名:端口URI 注意再注意:端口和URI之间没有/的。因为/也是URI。
例如:https://www.baidu.com/ab/index.html
http://www.baidu.com:8080/ab/index.html
以上的统称为URL
URI:除了 协议://IP或域名:端口,后面的部分统称为URI
例如:https://www.baidu.com/ab/index.html URI是/ab/index.html
http://www.baidu.com:8080/ab/index.html URI是/ab/index.html
总共分两种大类:
1.proxy_pass配置的代理URL没有URI,只有协议://IP或域名:端口。 例如:http://127.0.0.1 http://127.0.0.1:8080
2.proxy_pass配置的代理URL有URI。例如:http://127.0.0.1/ http://127.0.0.1/abc http://127.0.0.1/abc/
切记:http://127.0.0.1/后面的/也算是URI。
一.代理的地址中没有URI时:
例如:访问http://www.zhidao.cn/poss/abc/bill.html
当nginx配置文件proxy_pass后边的URL不带"/"时,连同匹配到的/poss/
路径,一起进行反向代理,代理到后端的路径为:http://127.0.0.1:8080/poss/abc/bill.html
server {
listen 80;
server_name www.zhidao.cn;
location /poss/ { proxy_pass http://127.0.0.1:8080; }
}
如上:只要proxy_pass代理的地址中没有URI,那么location中请求的URI全部转发给代理。
二.代理的地址中有URI时:
1.proxy_pass带后缀,且后缀为/,也就是URI为/时:
例如:访问http://www.zhidao.cn/poss/abc/bill.html
当nginx配置文件proxy_pass后边的url带"/"时,location中的/poss/会被proxy_pass中的/所替换,代理到后端的路径为:http://127.0.0.1:8080/abc/bill.html
server {
listen 80;
server_name www.zhidao.cn;
location /poss/ { proxy_pass http://127.0.0.1:8080/; }
}
2.proxy_pass带后缀,且后缀不仅仅为/ 时。
下面两种情况分别用http://192.168.1.4/proxy/test.html 进行访问。
(1)
location /proxy/ { proxy_pass http://127.0.0.1:81/fly/; //URI为/fly/ }
由于反向代理地址后面有/ ,则不会代理匹配的路径,所以最终会被代理到: http://127.0.0.1:81/fly/test.html 。 这个例子说白了就是用/fly/替换了/proxy/。
(2)
location /proxy/ { proxy_pass http://127.0.0.1:81/fly; //URI为/fly fly后面没有斜杠的 }
由于反向代理地址后面有/ , 则不会代理匹配的路径,所以最终会被代理到: http://127.0.0.1:81/flytest.html。 这个例子说白了就是用/fly替换了/proxy/。 所以可以看到fly和test.html中间没有/了。
总结:以上就是proxy_pass地址中带/和不带/的区别。
下面是几个例子:大家可以根据这几个例子真正掌握proxy_pass反向代理中带/和不带/的区别。
location和proxy_pass不同地方加/
location /test01 { proxy_pass http://127.0.0.1:8888; # 访问http://localhost/test01/123 ==> http://127.0.0.1:8888/test01/123 } location /test02/ {
#注意如果访问的是http://localhost/test02 则不会匹配这一项,因为这个location至少要匹配/test02/ proxy_pass http://127.0.0.1:8888; # 访问http://localhost/test02/123 ==> 127.0.0.1:8888/test02/123 } location /test03/ { # 注意不会匹配localhost/test03,理由同上 proxy_pass http://127.0.0.1:8888/; # 访问http://localhost/test03/ ==> 127.0.0.1:8888/ # 访问:http://localhost/test03/123 ==> 127.0.0.1:8888/123 } location /test04 { proxy_pass http://127.0.0.1:8888/; # 访问http://localhost/test04aaa ==> 127.0.0.1:8888/aaa # 访问http://localhost/test04/123 ==> 127.0.0.1:8888//123 }
nginx反向代理的时候加
/
和不加/
区别很大,情况也有很多种,容易忘记记混,这里记录一些情况