nginx location指令(匹配顺序匹配冲突)实战示例详解

Nafisa ·
更新时间:2024-05-15
· 1688 次阅读

目录

1. 对url的匹配

1.1 默认匹配

1.2 精确匹配( = )

1.3 正则,区分大小写 ( ~ )

1.4 正则表达式,不区分大小写 ( ~* )

2. 匹配顺序

2.1 示例(精确匹配最高)

2.2 示例(字串匹配次之)

2.3 示例(正则匹间配高于通用匹配)

2.4 示例(正则表达式间前边的为准)

2.5 示例(通用匹配兜底)

3. 匹配间的冲突

3.1 通用匹配 VS 字串匹配

1. 对url的匹配 1.1 默认匹配

语法示例

location /crow/ { return 501 "通用匹配\n"; } 1.2 精确匹配( = )

语法示例

location = /crow/ { return 501 "精确匹配\n"; } 1.3 正则,区分大小写 ( ~ )

语法示例

location ~ /crow/.*\.md { return 501 "正则表达式,区分大小写\n"; } 1.4 正则表达式,不区分大小写 ( ~* )

语法示例

location ~* /crow/.*\.md { return 501 "正则表达式,不区分大小写\n"; } 2. 匹配顺序

精确匹配(=

字串匹配(^~

正则匹配(~~*

默认匹配()

2.1 示例(精确匹配最高)

配置文件内容:

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"; } }

访问测试

[root@liubei nginx-crow-test]# curl http://localhost:1840/crow/test.md 精确匹配

可见精确匹配被匹配到。

下边我们去掉精确匹配:

2.2 示例(字串匹配次之)

配置文件内容:

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"; } }

访问测试

如下可见,还剩 字串匹配正则匹配通用匹配,结果匹配到了 字串匹配

[root@liubei nginx-crow-test]# curl http://localhost:1840/crow/test.md 字串匹配 2.3 示例(正则匹间配高于通用匹配)

配置文件

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"; #} }

访问测试

[root@liubei nginx-crow-test]# curl http://localhost:1840/crow/test.md 正则表达式,区分大小写 2.4 示例(正则表达式间前边的为准)

上例中我们看到:~在前边,因此先匹配了 ~。如果我们把~~*换个位置

配置文件

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"; } }

访问测试

[root@liubei nginx-crow-test]# curl http://localhost:1840/crow/test.md 正则表达式,不区分大小写 2.5 示例(通用匹配兜底)

配置文件

我们还是将所有匹配都写上

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"; } }

访问测试

[root@liubei nginx-crow-test]# curl http://localhost:1840/crow/test.txt 通用匹配 3. 匹配间的冲突 3.1 通用匹配 VS 字串匹配

通用匹配字串匹配相同时,启动报错

配置文件

location /crow/test.md { return 501 "通用匹配\n"; } location ^~ /crow/test.md { return 501 "字串匹配\n"; }

启动报错如下:

nginx-crow-test | nginx: [emerg] duplicate location "/crow/test.md" in /etc/nginx/conf.d/default.conf:45

以上就是nginx location指令(实战示例匹配顺序匹配冲突)使用详解的详细内容,更多关于nginx location指令的资料请关注软件开发网其它相关文章!



实战 示例 location Nginx

需要 登录 后方可回复, 如果你还没有账号请 注册新账号