location指令匹配规则
location指令用于匹配URL请求,便于在特定的条件或模式执行不同配置,location可以嵌套location。
- 精准匹配: 以
= /url
,精准匹配/url
请求 - 前缀匹配
- 不阻断正则匹配:以
/
开头,会匹配任何URL满足前缀匹配规则的URL请求,直到找到最长的匹配前缀 - 阻断正则匹配:以
^~
开头,若找到满足最长前缀匹配的URL,不会继续向下匹配
- 不阻断正则匹配:以
- 正则匹配
- 大小写敏感:以
~
开头,按照正则表达式匹配,大小写敏感 - 大小写不敏感:以
~*
开头,按照正则表达式匹配,大小写不敏感
- 大小写敏感:以
- 命名匹配:
location @name
,用于请求重定向(try_files、error_page等指令),且不能嵌套location
注意
正则匹配会按照配置块的顺序(由上到下)匹配,其他(普通)匹配则不会。
URL匹配规则如下:
- 若匹配精准匹配,则不再查找其他匹配项,结束
- 前缀匹配,多个满足则记录最长匹配项,若最长的location为
^~
类型,则不再继续正则匹配,结束 - 再继续进行正则匹配,只要存在一个正则匹配,则结束解析,否则返回上一步解析结果
nginx
server{
listen 8080;
server_name localhost;
default_type text/html;
# 精准匹配
location = /hello-world {
return 200 '/hello-world';
}
# 通用匹配
location / {
return 200 '/';
}
# 普通前缀匹配
location /documents/ {
return 200 '/documents/';
}
# 普通前缀匹配
location /images/ {
return 200 '^~ /images/';
}
# 阻断正则匹配前缀匹配
location ^~ /images/hello-world {
return 200 '/images/hello-world';
}
# 正则匹配
location ~ /images/ {
return 200 '~ /images/';
}
# 正则匹配大小写不敏感 /a.JS /a.Js /b.js /c.jS
location ~* (\.js|\.jpg){
return 200 '~* \.js|\.jpg';
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33