location 可以理解为 映射/虚拟目录, 其结构如下.
location / {
root html;
index index.html;
error_page 404 /404.html
}
简单看为
location [ = | ~ | ~* | ^~ ] uri {
}
location URI {}
对当前路径及子路径下的所有对象都生效;
location = URI {}
注意URL最好为具体路径。 精确匹配指定的路径,不包括子路径,因此,只对当前资源生效;
location ~ URI {}
模式匹配URI, 此处的URI可使用正则表达式, 区分字符大小写.
location ~* URI {}
模式匹配URI, 此处的URI可使用正则表达式, 不区分字符大小写.
location ^~ URI {}
用于普通URI,当找到一个匹配的location
,立即使用它处理而不再使用正则URI和请求字符串匹配
优先级:= > ^ ~ > ~ * > ~
uri 是待匹配的请求字符串, 可以是普通字符串如: /my.php
.
也可以是正则表达式字符串如 \.php$
例:
location = /{}
默认配置的意思,由于任何URI 都必然以
/
根开头,所以对于一个URI,如果有更精准的匹配,那自然是选更精确的,如果没有,"/"一定能为这个URI垫背(至少能匹配到 "/")
http://localhost/
会403,禁止访问.
http://localhost/asd
会404,没有这个页面
location ^~ uri{}
普通的
location
匹配完后,会继续匹配正则,如果你想停止这种行为,可以在uri前加上 ^~.
location ^~ /images/{}
匹配所有以
/images
/开头的,并且停止正则匹配,不继续向下找location
,匹配到就停止
location ~* \.(gif|jpg|jpeg)${}
匹配所有以gif jpg jpeg为后缀的请求
location 匹配规则
普通location
之间的匹配顺序
- 和书写顺序无关.
- 遵循最大匹配前缀原则.
例:
location 配置如下
location /bbs/mi4{ deny all; }
location /bbs/{ allow all; }
如果URI为:
http://localhost/bbs/ ,会匹配到第二个
http://localhost/bbs/mi3/ 匹配到第二个
http://localhost/bbs/ipho/ 匹配到第二个
http://localhost/bbs/mi4/ssasd 匹配第一个
正则 location
之间的匹配顺序
- 和书写顺序有关
- 按顺序匹配只要有一个正则被匹配, 则终止后面的匹配
例
location 配置如下
location ~ /bbs/\d\.html$ {deny all;}
location ~ /bbs/{allow all;}
如果URI为:http://localhost/bbs/1.html,先匹配到哪个location 就为哪个
混搭
- 普通严格精确匹配 > 正则匹配 > 普通最大前缀匹配(其他普通非严格精确匹配)
- = /优先级最高,优先匹配
- ~ /第二优先级
- / 最低优先级
网友评论