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反向代理的时候加/和不加/区别很大,情况也有很多种,容易忘记记混,这里记录一些情况
posted @ 2022-12-08 18:01  粉色纽扣  阅读(3428)  评论(0编辑  收藏  举报