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

 更新时间:2023年06月21日 11:37:54   作者:开发运维玄德公  
这篇文章主要介绍了nginx location指令(实战示例匹配顺序匹配冲突)详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

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指令的资料请关注脚本之家其它相关文章!

相关文章

  • nginx反向代理导致session失效的问题解决

    nginx反向代理导致session失效的问题解决

    这篇文章主要介绍了nginx反向代理导致session失效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Debian下搭建Nginx和Tomcat服务器实现负载均衡的方案

    Debian下搭建Nginx和Tomcat服务器实现负载均衡的方案

    这篇文章主要介绍了Debian下搭建Nginx和Tomcat服务器实现负载均衡的方案,其主要思想依然是动静分离并且以Nginx来进行反向代理这样的路子,需要的朋友可以参考下
    2015-12-12
  • Nginx服务器中配置GeoIP模块来拦截指定国家IP

    Nginx服务器中配置GeoIP模块来拦截指定国家IP

    Nginx中自带GeoIP模块可以屏蔽指定IP的请求,只不过默认没有被编译,打开以后我们只要再下载一个IP规则就行,Nginx服务器中配置GeoIP模块来拦截指定国家IP
    2016-06-06
  • nginx处理http请求实例详解

    nginx处理http请求实例详解

    这篇文章主要介绍了nginx处理http请求实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • Nginx部署项目上传文件报错413的解决方法

    Nginx部署项目上传文件报错413的解决方法

    本文主要介绍了Nginx部署项目上传文件报错413的解决方法,报错413是因为Nginx对上传大小做了限制,所以我们需要配置文件,下面就来解决这个问题,感兴趣的可以了解一下
    2024-03-03
  • 如何配置Nginx每个进程最多打开的文件数量

    如何配置Nginx每个进程最多打开的文件数量

    这篇文章主要介绍了配置Nginx每个进程最多打开的文件数量,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Nginx进程杀不完的解决方法

    Nginx进程杀不完的解决方法

    这篇文章主要给大家介绍了Nginx进程杀不完的解决方法,文中通过图文结合的方式给大家介绍的非常详细,对大家的学习或工作有一定的帮助,,需要的朋友可以参考下
    2023-12-12
  • nginx:413 Request Entity Too Large的处理办法--修改 PHP上传文件大小

    nginx:413 Request Entity Too Large的处理办法--修改 PHP上传文件大小

    在用 phpMyAdmin 进行 sql 数据库导入的时候,经常需要上传比较大的 sql 数据文件,而这时会常碰见 nginx报错:413 Request Entity Too Large。解决此问题,根据上传数据文件的大小进行修改处理
    2014-06-06
  • Nginx安装SSl模板异常处理方式

    Nginx安装SSl模板异常处理方式

    文章介绍了在Linux环境下配置Nginx支持SSL时遇到的问题及解决方法,主要步骤包括:安装SSL模块、解决缺少OpenSSL包的问题,并通过下载和编译源码的方式解决SSL模块安装失败的问题
    2025-02-02
  • 解决Nginx配置静态资源文件404 Not Found问题

    解决Nginx配置静态资源文件404 Not Found问题

    在使用Nginx作为静态资源服务器时,如果配置了根目录root导致404错误,而使用前缀URL配置alias则需要正确处理目录路径,使用alias时要确保目录名后加‘/’,并且在需要时使用root和alias配置,本文介绍Nginx配置静态资源文件404 Not Found问题解决方法,感兴趣的朋友一起看看吧
    2025-03-03

最新评论