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