1. 对url的匹配
1.1 默认匹配
- 语法示例
1 2 3 | location /crow/ { return 501 "通用匹配n" ; } |
1.2 精确匹配( = )
- 语法示例
1 2 3 | location = /crow/ { return 501 "精确匹配n" ; } |
1.3 正则,区分大小写 ( ~ )
- 语法示例
1 2 3 | location ~ /crow/ .*.md { return 501 "正则表达式,区分大小写n" ; } |
1.4 正则表达式,不区分大小写 ( ~* )
- 语法示例
1 2 3 | location ~* /crow/ .*.md { return 501 "正则表达式,不区分大小写n" ; } |
2. 匹配顺序
- 精确匹配(
=
) - 字串匹配(
^~
) - 正则匹配(
~
、~*
) - 默认匹配()
2.1 示例(精确匹配最高)
- 配置文件内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | server { listen 1840; root /usr/share/nginx/html ; location / { index index.html index.php index.htm; } location /crow/ { return 501 "通用匹配n" ; } location = /crow/test .md { return 501 "精确匹配n" ; } location ~ /crow/ .*.md { return 501 "正则表达式,区分大小写n" ; } location ~* /crow/ .*.md { return 501 "正则表达式,不区分大小写n" ; } location ^~ /crow/test .md { return 501 "字串匹配n" ; } } |
- 访问测试
1 2 | 精确匹配 |
可见精确匹配被匹配到。
下边我们去掉精确匹配:
2.2 示例(字串匹配次之)
- 配置文件内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | server { listen 1840; root /usr/share/nginx/html ; location / { index index.html index.php index.htm; } location /crow/ { return 501 "通用匹配n" ; } #location = /crow/test.md { # return 501 "精确匹配n"; #} location ~ /crow/ .*.md { return 501 "正则表达式,区分大小写n" ; } location ~* /crow/ .*.md { return 501 "正则表达式,不区分大小写n" ; } location ^~ /crow/test .md { return 501 "字串匹配n" ; } } |
- 访问测试
如下可见,还剩 字串匹配
、正则匹配
、通用匹配
,结果匹配到了 字串匹配
。
1 2 | 字串匹配 |
2.3 示例(正则匹间配高于通用匹配)
- 配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | server { listen 1840; root /usr/share/nginx/html ; location / { index index.html index.php index.htm; } location /crow/ { return 501 "通用匹配n" ; } #location = /crow/test.md { # return 501 "精确匹配n"; #} location ~ /crow/ .*.md { return 501 "正则表达式,区分大小写n" ; } location ~* /crow/ .*.md { return 501 "正则表达式,不区分大小写n" ; } #location ^~ /crow/test.md { # return 501 "字串匹配n"; #} } |
- 访问测试
1 2 | 正则表达式,区分大小写 |
2.4 示例(正则表达式间前边的为准)
上例中我们看到:~
在前边,因此先匹配了 ~
。如果我们把~
和~*
换个位置
- 配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | server { listen 1840; root /usr/share/nginx/html ; location / { index index.html index.php index.htm; } location /crow/ { return 501 "通用匹配n" ; } location ~* /crow/ .*.md { return 501 "正则表达式,不区分大小写n" ; } location ~ /crow/ .*.md { return 501 "正则表达式,区分大小写n" ; } } |
- 访问测试
1 2 | 正则表达式,不区分大小写 |
2.5 示例(通用匹配兜底)
配置文件
我们还是将所有匹配都写上
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | server { listen 1840; root /usr/share/nginx/html ; location / { index index.html index.php index.htm; } location /crow/ { return 501 "通用匹配n" ; } location = /crow/test .md { return 501 "精确匹配n" ; } location ~ /crow/ .*.md { return 501 "正则表达式,区分大小写n" ; } location ~* /crow/ .*.md { return 501 "正则表达式,不区分大小写n" ; } location ^~ /crow/test .md { return 501 "字串匹配n" ; } } |
- 访问测试
1 2 | 通用匹配 |
3. 匹配间的冲突
3.1 通用匹配 VS 字串匹配
通用匹配
和字串匹配
相同时,启动报错
- 配置文件
1 2 3 4 5 6 | location /crow/test .md { return 501 "通用匹配n" ; } location ^~ /crow/test .md { return 501 "字串匹配n" ; } |
- 启动报错如下:
1 | nginx-crow- test | nginx: [emerg] duplicate location "/crow/test.md" in /etc/nginx/conf .d /default .conf:45 |
以上就是nginx location指令(实战示例匹配顺序匹配冲突)使用详解的详细内容,更多关于nginx location指令的资料请关注IT俱乐部其它相关文章!