- 语法:
location [=|~|~*|^~] /uri/ { ... } - 默认值:无
- 上下文:
server
根据url不同进行不同配置,可以使用字符串也可以使用正则表达式匹配路由。
~*:不区分大小写匹配。
~:区分大小写的匹配。
匹配规则
正则表达式的优先级比较高,通常会检测文字字符串(区分大小写,使用具体匹配原则),之后按照文件中定义的顺序检测正则表达式,匹配到第一个正则表达式将停止匹配,未找到正则表达式则按照文字字符串的检测结果。
改变以上行为有两种办法:
- 第一种是使用前缀
=:仅匹配精确查找,查询匹配则立即停止查找,处理请求。例如请求"/"频繁出现,那么使用
lication =/ {}
将会加快此请求的处理速度。
- 另一种是使用前缀
^~:此前缀与文字字符串一起使用,相当于告诉nginx当文字字符串匹配时,不进行正则表达式的匹配。
匹配规则如下:
=:完全匹配,找到之后立即停止。- 常规字符串所有指令,若指令中使用了
^~前缀,会立刻停止匹配。 - 正则表达式,按照在配置文件中的定义顺序执行。
- 若3中找到结果,则使用该结果,否则使用2中的匹配项。
示例
location = / {
# 仅匹配 /
[ configuration A ]
}
location / {
# 匹配任何查询,所有的查询都以/开头,但是正则表达式和任何更长的常规块将首先匹配
[ configuration B ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开头的查询并停止搜索,因此不会检查正则表达式。
[ configuration C ]
}
location ~* .(gif|jpg|jpeg)$ {
#匹配任何以 gif、jpg 或 jpeg 结尾的请求。
#然而,所有 /images/ 目录的请求都将由Configuration C。
[ configuration D ]
}
/-> 配置A/documents/document.html-> 配置 B/images/1.gif-> 配置 C/documents/1.jpg-> 配置 D