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/

相關文章
相關標籤/搜索