proxy_pass指令的URL变量末尾是否加斜杠的影响

请看这个配置示例:

#配置1:proxy_pass  http://192.168.1.1;

#配置2:proxy_pass  http://192.168.1.1/;

配置1和配置2的区别在于,配置2中proxy_pass指令的URL变量末尾加了斜杠“/”,这意味着2中proxy_pass指令的URL变量包含了URI “/”,而配置1中proxy_pass指令的URL变量不含URI。

实例1:

server

  {

     listen 80;

    server_name www.myweb.com;

    localtion   / 

      {

扫描二维码关注公众号,回复: 1885379 查看本文章

         proxy_pass  http://192.168.1.1;  #配置1

         proxy_pass  http://192.168.1.1/;  #配置2

      }

}

在该配置中,location 块使用“/”作为uri变量的值来匹配不包含URI的请求URL。由于请求URL中不包含URI,因此配置1和配置2的效果是一样的。

比如,客户端请求的URL为“http://www.myweb.com/index.html”,其将会被实例1中的location块匹配成功并进行处理。不管使用配置1还是2,转向的URL都为“http://192.168.1.1/index.html”。

实例2:

server

  {

     listen 80;

    server_name www.myweb.com;

    localtion    /server/

      {

         proxy_pass  http://192.168.1.1;  #配置1

         proxy_pass  http://192.168.1.1/;  #配置2

      }

}

在该配置中,location块使用“/server/”作为uri变量的值来匹配包含URI “/server/”的请求URL。

这时,使用配置1和2的转向结果就不同了。使用配置1的时候,proxy_pass指令中的URL变量不包含URI,nginx服务器将不改变原地址的URI,使用配置2的时候,proxy_pass中的URL变量包含URI "/",nginx服务器会将原地址的URI替换为“/”。

比如客户端的请求URL为“http://www.myweb.com/server/index.html”,将会被实例2中的location块匹配成功并进行处理。使用配置1的时候,转向的URL为“http://192.168.1.1/server/index.html”,原地址URI“/server/”未被改变;使用配置2的时候,转向的URL为“http://192.168.1.1/index.html”,可以看到,原地址的“/server/”被替换为“/”。


猜你喜欢

转载自blog.csdn.net/xiaoxiangzi520/article/details/80534699