根据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