uri 匹配规则
location 规则类型
这部分内容来自详细解析 nginx uri 如何匹配 location 规则
= exact uri
完全匹配规则,要求 url 和规则完全相同
1 | location ~ /api/v1 { |
~ case-sensitive regex
区分大小写的正则表达式匹配规则
1 | location ~ /api/v1 { |
~* case-insensitive regex
不区分大小写的正则表达式匹配规则
1 | location ~ /api/v1 { |
~* case-insensitive regex
不大小写的正则表达式匹配规则
1 | location ~ /api/v1 { |
^~ disable regex prefix
匹配流程与 prefix 规则相同,有一点区别在于,如果最长匹配是当前规则,则之后不进行 正则表达式 规则的搜索。
1 | location ~ /api/v1 { |
uri 如何选择 location
- 如果存在 exact uri 规则与 uri 匹配,至步骤 6
在所有 prefix 规则和 disable regex prefix 规则中进行匹配(与这些规则定义的顺序无关),
如果没有匹配到规则,至步骤 3;如果存在匹配的规则,选择出最长匹配 uri 的规则:- 如果规则是 disable regex prefix 类型,至步骤 6
- 如果规则是 prefix 类型,记住当前匹配的 prefix 规则,选为待定,至步骤 3
逐个遍历 case-sensitive regex 规则和 case-insensitive regex 规则(按照这些规则定义的前后顺序):
- 如果规则匹配,则遍历终止,至步骤 6
- 如果规则没有匹配,则继续
如果之前有 prefix 规则条目被选择为待定,至步骤 6
- 匹配失败,返回 404,结束
- 选择当前规则,使用其配置,结束
try_files 解析
$uri 指代访问的 uri 资源,$uri/语法可以用来检测一个目录的存在,如果没有找到,一个内置的重定向将请求重定向到最后一个参数
最后一个参数可以指向一个命名的 location
1 | location / { |