• nginx配置文件中字符"/"加与不加的区别


    location目录匹配详解

    nginx每个location都是一个匹配目录,nginx的策略是:访问请求来时,会对访问地址进行解析,从上到下逐个匹配,匹配上就执行对应location大括号中的策略,并根据策略对请求作出相应。

    依访问地址:http://www.wandouduoduo.com/wddd/index.html为例,nginx配置如下:

    1 location /wddd/ {
    2     proxy_connect_timeout 18000; ##修改成半个小时
    3     proxy_send_timeout 18000;
    4     proxy_read_timeout 18000;
    5     proxy_pass http://127.0.0.1:8080;
    6 }

    那访问时就会匹配这个location,从而把请求代理转发到本机的8080端口的Tomcat服务中,Tomcat响应后,信息原路返回。总结:location如果没有“/”时,请求就可以模糊匹配以字符串开头的所有字符串,而有“/”时,只能精确匹配字符本身。

    下面举个例子说明:

    配置 location /wandou 可以匹配 /wandoudouduo 请求,也可以匹配 /wandou*/duoduo 等等,只要以 wandou 开头的目录都可以匹配到。而 location /wandou/ 必须精确匹配 /wandou/ 这个目录的请求, 不能匹配 /wandouduoduo/ 或 /wandou*/duoduo 等请求。

    proxy_pass有无“/”的四种区别探究

    访问地址都是以:http://www.wandouduoduo.com/wddd/index.html 为例。请求都匹配目录/wddd/

    第一种:加"/"

    1    location  /wddd/ {
    2     proxy_pass  http://127.0.0.1:8080/;
    3    }

    测试结果,请求被代理跳转到:http://127.0.0.1:8080/index.html

    第二种: 不加"/"

    1 location  /wddd/ {
    2     proxy_pass http://127.0.0.1:8080;
    3    }

    测试结果,请求被代理跳转到:http://127.0.0.1:8080/wddd/index.html

    第三种: 增加目录加"/"

    1 location  /wddd/ {
    2     proxy_pass http://127.0.0.1:8080/sun/;
    3    }

    测试结果,请求被代理跳转到:http://127.0.0.1:8080/sun/index.html

    第四种:增加目录不加"/"

    1 location  /wddd/ {
    2     proxy_pass http://127.0.0.1:8080/sun;
    3    }

    测试结果,请求被代理跳转到:http://127.0.0.1:8080/sunindex.html

    总结

    location目录后加 "/", 只能匹配目录,不加 “/” 不仅可以匹配目录还对目录进行模糊匹配。而proxy_pass无论加不加“/”,代理跳转地址都直接拼接。

    为了加深大家印象可以用下面的配置实验测试下:

     1 server {
     2   listen 80;
     3   server_name localhost;
     4   
     5   # http://localhost/wddd01/xxx -> http://localhost:8080/wddd01/xxx
     6   location /wddd01/ {
     7     proxy_pass http://localhost:8080;
     8   }
     9  
    10   # http://localhost/wddd02/xxx -> http://localhost:8080/xxx
    11   location /wddd02/ {
    12     proxy_pass http://localhost:8080/;
    13   }
    14  
    15   # http://localhost/wddd03/xxx -> http://localhost:8080/wddd03*/xxx
    16   location /wddd03 {
    17     proxy_pass http://localhost:8080;
    18   }
    19  
    20   # http://localhost/wddd04/xxx -> http://localhost:8080//xxx,请注意这里的双斜线,好好分析一下。
    21   location /wddd04 {
    22     proxy_pass http://localhost:8080/;
    23   }
    24  
    25   # http://localhost/wddd05/xxx -> http://localhost:8080/hahaxxx,请注意这里的haha和xxx之间没有斜杠,分析一下原因。
    26   location /wddd05/ {
    27     proxy_pass http://localhost:8080/haha;
    28   }
    29  
    30   # http://localhost/api6/xxx -> http://localhost:8080/haha/xxx
    31   location /wddd06/ {
    32     proxy_pass http://localhost:8080/haha/;
    33   }
    34  
    35   # http://localhost/wddd07/xxx -> http://localhost:8080/haha/xxx
    36   location /wddd07 {
    37     proxy_pass http://localhost:8080/haha;
    38   }
    39         
    40   # http://localhost/wddd08/xxx -> http://localhost:8080/haha//xxx,请注意这里的双斜杠。
    41   location /wddd08 {
    42     proxy_pass http://localhost:8080/haha/;
    43   }
    44 }

    参考原文CSDN博主「戴国进」 https://blog.csdn.net/JineD/article/details/121102344

  • 相关阅读:
    BootstrapValidator 解决多属性被同时校验问题《转》
    SSRS 浮动表头设置
    ToString(string format)输出格式简述
    配置AutoMapper映射规则《转》
    IE浏览器上传图片预览兼容(IE 7 8 9 10 11)
    SQL : IN 和 Exists 的区别
    BitArray简单例子
    Rx.net 例子——(1)基础
    C# Pinvoke判断是UEFI模式还是BIOS模式
    wpf Route Event Code Snippet
  • 原文地址:https://www.cnblogs.com/woju/p/16331840.html
Copyright © 2020-2023  润新知