1、location 指令介绍1.1、语法
语法 | 位置 |
location [ = | ~ | ~* | ^~ ] uri { … } | 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。