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

2023-12-01 0 262
目录
  • 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指令的资料请关注悠久资源其它相关文章!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 Nginx服务器 nginx location指令(匹配顺序匹配冲突)实战示例详解 https://www.u-9.cn/server/nginx/8391.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务