Nginx配置中Location的优先级

Stella981
• 阅读 789

根据Nginx的官方文档,Location标签一共有四个修饰符,分别是:

(1) =:表示完全匹配;

(2) ^~:匹配URI的前缀,并且后面的正则表达式不再匹配,如果一个URI同时满足两个规则的话,匹配最长的规则;

(3) ~:匹配正则表达式,大小写敏感;

(4) ~*:匹配正则表达式,大小写不敏感;

优先级:(1)> (2) > (3) = (4)

就是完全匹配=的优先级是最高的,其次是^~,最后就是正则表达式的匹配。

换言之,一个URI请求首先检查是否符合=的规则,如果符合就直接返回结果,否则继续匹配^~的规则,如果^~规则不匹配,那么就匹配~~*,正则匹配的先后顺序是:在配置文件中先出现的先匹配,匹配成功就不再匹配后面的正则表达式。

注意:即使是在~~*同时出现的情况,仍然按照出现的顺序进行匹配。

例子:

location ~ /.*\.php {
    root /var/www/html/php;
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.3-fpm.sock;
}
location ~* /ddd.*\.php {
    root /var/www/html;
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.3-fpm.sock;
}

我们尝试访问http://192.168.1.128/ddd.php,那么实际上读取的是/var/www/html/php/ddd.php。虽然两个规则都是匹配的,但是第一个规则出现在先,所以第一个规则优先匹配,读取的是/var/www/html/php/ddd.php

最后,如果上面的四个规则都不匹配,那么就是直接匹配URI的前缀,譬如:location /abc.php

参考文献:

http://nginx.org/en/docs/http/ngx_http_core_module.html#location

https://www.bo56.com/nginx-location%E5%9C%A8%E9%85%8D%E7%BD%AE%E4%B8%AD%E7%9A%84%E4%BC%98%E5%85%88%E7%BA%A7/

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
半臻 半臻
3年前
Python基础11——正则表达式
19正则表达式19.1正则基础正则表达式:字符串处理工具应用场景1.html查询2.验证字符串是否符合规则re模块match方法python通过正则表达式对字符串进行匹配importre使用match方法进行匹配操作re.match()从字符串的开始位置进行匹配,匹配成功,返回match对象。匹配失败,返回Noneresre
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Nginx 伪静态Rewrite,重定向Location配置总结(转)
语法规则:location\|~|~\|^~\/uri/{…}\开头表示精确匹配^~开头表示uri以某个常规字符串开头,理解为匹配url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~/static//aa匹配到(注意是空格)。~开头表示区分大小写的正则匹配~\ 
Stella981 Stella981
3年前
Linux架构之Nginx 常见问题
第54章Nginx常见问题一、Nginx多Sever优先级在开始处理一个http请求时,nginx会取出header头中的Host变量,与nginx.conf中每个server的server_name进行匹配,由此决定到底由哪一个server来处理这个请求。但如果nginx配置多个相同的
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
Nginx 常见问题整理
Nginx常见问题整理1、Nginx常见问题1、相同server\_name多个虚拟主机优先级访问根据文件名顺序优先读取。使用ip访问的时候,也是根据文件名顺序优先读取。2、location匹配优先级进行普通字符精
Stella981 Stella981
3年前
Nginx 的 location 匹配规则
约定本文以Nginx1.17.6主线版为准。引言location是Nginx配置中的重要一环,用来配置动静分离、反向代理等功能。而location匹配规则,网上有太多错误的说法,今予以纠正并给出正确规则描述。最常见的错误最常见的错误之一,就是认为^~的优先级高于~,但实际上,我们
Stella981 Stella981
3年前
AJPFX总结关于Java中过滤出字母、数字和中文的正则表达式
1、Java中过滤出字母、数字和中文的正则表达式(1)过滤出字母的正则表达式\^(AZaz)\(2)过滤出数字的正则表达式\^(09)\(3)过滤出中文的正则表达式\^(\\\\u4e00\\\\u9fa5)\(4)过滤出字母、数字和中文的正则表达式\^(azAZ09\\\\u
Stella981 Stella981
3年前
Linux文本处理常用命令
1.正则表达式(1)正则表达式一般用来描述文本模式的特殊用法,由普通字符(例如字符az)以及特殊字符(称为元字符,如/、\、?等)组成。(2)基本元字符集及其含义^:只匹配行首。 如^a匹配以a开头的行abc,a2e,a12,aaa,......$:只匹配行尾。 如^a匹配以a结尾的行bca,12a,