当前位置:首页 > 技术文章 > 正文内容

一张图搞明白Nginx的 / 和 ^~ / 匹配的相同点和不同点

arlanguage3个月前 (01-31)技术文章30

相同点

  • 都可以匹配任何以 /xxx 开头的请求 URI
  • 都会根据用户请求的URL继续在配置中查找,直到找到最长匹配的;但是如果过程中有正则匹配的时候 /xxx会立即停止,但 ^~ /xxx不会

不同点

优先级不同:

  • /xxx 会低于 ^~ /xxxx
  • /xxx 会低于 正则匹配
  • ^~ /xxxx 会高于正则匹配

例子

例1:查找最长匹配

比如用户访问URL为 /api/front/doc/info

nginx 配置如下

location /api {}
location /api/front {}
location /api/front/doc {}
location /api/front/software/info {}

nginx会先找到 /api的 location;但是会继续去配置中查找,然后找到/api/front的location;然后依次类推最后找到最长的即 location /api/front/doc {}

例2:/xxx 低于 正则匹配

用户请求URL为 /api/font/doc/info

配置如下

location ^~ /api {
return 200 "<html><body>^~ /api </body></html>";
}
location ^~ /api/front {
return 200 "<html><body>^~ /api/front </body></html>";
}
location /api/front/doc {
return 200 "<html><body>^~ /api/front/doc</body></html>";
}
location ~* /api/.* {
return 200 "<html><body>/api</body></html>";
}

虽然 /api/front/doc 是最长匹配的,但因为有正则 ~* /api/.* 匹配了,所以nginx会采用

location ~* /api/.* {
return 200 "<html><body>/api</body></html>";
}

例3:^~ /xxxx 会高于正则匹配

例3:用户请求URL为 /api/font/doc/info

配置如下

location ^~ /api {
return 200 "<html><body>^~ /api </body></html>";
}
location ^~ /api/front {
return 200 "<html><body>^~ /api/front </body></html>";
}
location ^~ /api/front/doc {
return 200 "<html><body>^~ /api/front/doc</body></html>";
}
location ~* /api/.* {
return 200 "<html><body>/api</body></html>";
}

这里Nginx会采用 location ^~ /api/front/doc 因为 ^~ 的匹配符会比正则的匹配优先级高

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/1660.html

标签: nginx 例子
分享给朋友:

“一张图搞明白Nginx的 / 和 ^~ / 匹配的相同点和不同点” 的相关文章

nginx location 多root理解location

由于应用需求,这个 r 目录需要单独拉出来做处理,nginx 最开始是这样写的: server { root /home/webadm/htdocs; index index.php; location /r/ { root /diska/htdocs; } location ~ \.php { f...

nginx 解决 readv() failed (104: Connection reset by peer)

查看nginx error错误,发现上传接口报以下错:2019/10/10 19:58:25 [error] 299784#0: *5967188 readv() failed (104: Connection reset by peer) while reading upstream, clien...

nginx支持跨域的方法 nginx配置支持跨域

在nginx的配置文件中添加允许跨域的响应头。参考nginx官方文档,添加响应头的方法如下:在conf文件的server作用域中添加如下响应头:server { listen 80; # 其他配置... # 允许跨域 add_header Access-Control-Allow-...

Nginx的安装及配置详解 nginx1.12安装

Nginx是一个强大的免费开源的HTTP服务器和反向代理服务器。在Web开发项目中,nginx常用作为静态文件服务器处理静态文件,并负责将动态请求转发至应用服务器(Django, Flask, etc)。熟悉Nginx的配置对Web开发和运维人员来说至关重要。本文整理了Nginx的配置大全,可以作为...

轻量级日志平台 Loki 2.3 发布:15 倍最近数据查询速度提升

一、前言Loki v2.3.0 中添加了出色的新功能,进行了 bug 修复。除此之外,性能也得到了提升。二、自定义保留规则Loki 中的保留对于集群来说一直是全局的,并推迟到底层对象存储。Loki 现在可以通过 Compactor 组件处理保留。 你可以配置每个租户和每个流的保留时间。 这些不同的保...

「网络」运维需要掌握的 17 个实用技巧

1、查找当前目录下所有以.tar结尾的文件然后移动到指定目录find . -name “*.tar” -execmv {}./backup/ ;注解:find –name 主要用于查找某个文件名字,-exec 、xargs可以用来承接前面的结果,然后将要执行的动作,一般跟find在一起用的很多,fi...