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