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/
-
定位流程是
- 精准匹配中
=/, 根目录为usr/local/nginx/www,得到index页为index.html - 再次访问
/index.html, 此次内部转跳uri已经是/index.html, - 此时一般匹配
/生效,根目录为/usr/local/nginx/html - 最终结果,访问了
/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;
}

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;
}

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;
}

正则表达式
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匹配的更长,因此使用之;

总结

location解析过程