Nginx配置中Location的优先级

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

(1) =:表示彻底匹配;html

(2) ^~:匹配URI的前缀,而且后面的正则表达式再也不匹配,若是一个URI同时知足两个规则的话,匹配最长的规则;nginx

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

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

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

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

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

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

例子:文档

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/

相关文章
相关标签/搜索