03_nginx之location

location

location 有”定位”的意思,,根据Uri来进行不同的定位,在虚拟主机的配置中,是必不可少的。
location可以把网站的不同部分,定位到不同的处理方式上。比如, 碰到.php, 如何调用PHP解释器? --这时就需要location

  • location 的语法
location [=|~|~*|^~] patt {
}

中括号可以不写任何参数,此时称为一般匹配

也可以写参数,因此,大类型可以分为3种:

location = patt {} [精准匹配]
location patt{} [一般匹配]
location ~ patt{} [正则匹配]

精准匹配

  • 如何发挥作用?:
    首先看有没有精准匹配,如果有,则停止匹配过程.
location = patt {
    config A
}

如果 $uri == patt,匹配成功,使用config A

        location =/ {
            root www;
            index index.htm index.htm;
        }

        location / {
            root   html;
            index  index.html index.htm;
        }

上面都是相对路径,绝对路径为usr/local/nginx/www/usr/local/nginx/html
如果访问:http://z.com/

  • 定位流程是

    1. 精准匹配中 =/, 根目录为usr/local/nginx/www ,得到index页为index.html
    2. 再次访问 /index.html , 此次内部转跳uri已经是/index.html
    3. 此时一般匹配 / 生效,根目录为/usr/local/nginx/html
    4. 最终结果,访问了 /usr/local/nginx/html/index.html
  • 精准匹配

        location =/index.htm {
            root www;
            index index.htm index.htm;
        }

        location /index.htm {
            root   html;
            index  index.html index.htm;
        }
03_nginx之location_第1张图片
        location =/index.htm {
            root www;
            index index.htm index.htm;
        }

        location =/ {
            root    www;
            index   index.html index.htm;
        }

        location /index.htm {
            root   html;
            index  index.html index.htm;
        }
03_nginx之location_第2张图片
        location =/index.html {
            root www;
            index index.htm index.htm;
        }

        location =/ {
            root    www;
            index   index.html index.htm;
        }

        location /index.htm {
            root   html;
            index  index.html index.htm;
        }
03_nginx之location_第3张图片

正则表达式

        location / {
            root   html;
            index  index.html index.htm;
        }

        location ~ image {
            root    www;
            index   index.html index.htm;
        }

如果我们访问 http://z.com/image/logo.png
此时, //image/logo.png 匹配,同时,image正则 与image/logo.png也能匹配,谁发挥作用?
正则表达式的成果将会使用,图片真正会访问 /usr/local/www/image/logo.png

        location / {
            root   html;
            index  index.html index.htm;
        }

        location /foo {
            root    www;
            index   index.html index.htm;
        }

我们访问 http://z.com/foo
对于uri /foo, 两个location的patt,都能匹配他们,即 /能从左前缀匹配 /foo, /foo也能左前缀匹配/foo,
此时, 真正访问 /usr/local/www/index.html,原因:/foo匹配的更长,因此使用之;

03_nginx之location_第4张图片

总结

03_nginx之location_第5张图片
location解析过程

你可能感兴趣的:(03_nginx之location)