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。