关于 nginx 的配置的 location

来源:互联网 发布:mac无法搜索移动硬盘 编辑:程序博客网 时间:2024/06/05 15:09
精准匹配和普通匹配:
   server{
           location =/index.htm{                                       ////精准匹配
                   root /var/www/html                                  ////root 指向的目录 也可以写在外面,这样的意思就是 server 的 公共目录,location 可以单独指向一个目录。
                   index index.htm index.html
           }
 
           location =/{
                   root /var/www/html
                   index index.htm index.html
           }
          
           location /index.htm {                                         ////正则匹配
                   root /usr/local/src/nginx/html
                   index index.htm index.html
           }
   }
         如果你在浏览器输入一个 192.168.1.200 访问,服务器会把 url 看做 /,这样就会精准配准第二个 location,然后 url 就被服务器转换成 192.168.1.200/index.htm ,然后访问,再次匹配,又被精准定位第一个 location,然后访问,没有可以匹配的 location 就直接访问到 /var/www/html/index.htm 页面
       
         我的猜测是,如果没有指定具体访问页面,会默认当做访问的是 location 里的 index 第一个指定的页面。
 
正则匹配和普通匹配:
      server {
              location /{
                       root html;
                       index index.html index.htm;
             }
         
              location ~ image{
                      root /var/www/
                      index index.html;
             }
       }
             第二段 location 是正则匹配,当  url 中包含 image 就会指向 /var/www 目录【这就是动静分离、img 的 src 也会触动 location】。其实第一个 location 也会进行匹配,因为第一个 / 符合第一个 location 的规则,但是在跳转访问时会匹配到第二个 location 会覆盖前面第一个定位的地址。
 
 
注意:
      普通匹配是谁匹配的长就是谁的为主。
      正则匹配是按照从上往下顺序执行的。
 
总结:
       如果 root 指向的目录写在 server 里面,且 location 里面没有指定 root ,就会按照 server 全局里面的当做根目录。
      location 就是匹配 url,无论是域名还是 ip 都会看成一个 /。后面的路径就是我们写的规则来匹配。
 
      location 的命中过程是这样的:1、先判断精准命中,如果命中,立即返回结果并结束解析过程。2、判断普通命中,如果多个命中,记录下最长的命中结果(记录但不结束,最长的为准)。继续判断正则表达式的解析结果,按配置里的正则表达式的顺序为准,由上到下开始匹配,一旦匹配成功 1 个,立即返回结果,并结束解析过程。





0 0