nginx中我们会用location指令来匹配指定的uri进行一些逻辑处理。
location指令语法
|
|
location 支持常规字符串和正则表达式两种匹配模式。
=
提高常规字符串匹配优先级~
正则匹配,大小写敏感~*
正则匹配,大小写不敏感^~
提高常规字符串匹配优先级
匹配顺序
- 首先匹配
=
前缀的常规字符串,如果匹配成功则停止后续匹配。 - 其次匹配
^~
前缀的常规的字符串,如果匹配成功则停止后续匹配。 - 再次匹配
~
或~*
前缀的正则表达式,如果匹配成功则停止后续匹配。 - 最后匹配不带任何前缀的常规字符串,如果匹配成功则停止后续匹配。
- 上述都未匹配上则返回404。
多个正则表达式的匹配优先级是由在文件中的物理顺序决定的。
下面举例说明
|
|
如果请求的uri是/index.html
,根据之前的规则=
前缀的常规字符串被优先匹配(第二个location配置)。
如果请求的uri是/list.html
,根据之前的规则^~
前缀的常规字符串被优先匹配(第三个location配置)。
如果请求的uri是/about.html
,根据之前的规则~
或~*
前缀正则表达式被优先匹配(第四个location配置),
第五个location配置实际上不会起作用,因为正则匹配的优先级高于它。
如果请求的uri是/robots.txt
,根据之前的规则常规字符串会被匹配(第一个location配置)。
总结
=
总是被优先匹配,其次是^~
,再次是~
和~*
,最后才是没有任何前缀的常规字符串。