Nginx 入门实战(5)--location 指令说明

发布时间 2023-05-21 10:28:32作者: 且行且码

1、location 指令介绍

1.1、语法

语法 位置

location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }

server, location

1.2、匹配类型

类型 说明
= 精确匹配
空 或 ^~

字符串匹配

如果 ^~ 是最长的字符串匹配,则停止搜索后续的正则匹配

~ 区分大小写的正则匹配
~* 不区分大小写的正则匹配

1.3、uri 正则表达式

表达式 说明
* 重复前面的字符 0 次或多次
? 重复前面的字符 0 次或 1 次
+ 重复前面的字符 1 次或多次
. 匹配除换行符以外的任意一个字符
^ 以什么开头
$ 以什么结尾
\S 非空白字符
|
() 捕获组

1.4、匹配优先级

精确匹配(=) > 字符串匹配(长 > 短 [注: 如果 ^~ 是最长匹配则停止后续正则匹配]) > 正则匹配(上 > 下)

  • 精确匹配只能命中一个
  • 字符串匹配使用匹配最长的最为匹配结果
  • 正则匹配按照 location 定义的顺序进行匹配,先定义具有高优先级

字符串匹配和正则匹配:字符串匹配优先搜索,但是只是记录下最长的匹配 ( 如果 ^~ 是最长的匹配,则会直接命中,停止搜索正则 );然后继续搜索正则匹配,如果有正则匹配,则命中正则匹配;如果没有正则匹配,则命中最长的字符串匹配。

2、使用样例

location = / {
    [ configuration A ]
}

location / {
    [ configuration B ]
}

location /documents/ {
    [ configuration C ]
}

location ^~ /images/ {
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E ]
}

"/" 请求将匹配配置 A,"/index.html" 请求将匹配配置 B,"/documents/document.html" 请求将匹配配置 C,"/images/1.gif" 请求将匹配配置 D,而 "/documents/1.jpg" 请求将匹配配置 E。

 

 

参考:https://nginx.org/en/docs/http/ngx_http_core_module.html#location