nginx的location匹配順序


總原則:先前綴字符串,再正則表達式。

不管配置文件中的location順序怎么寫,在匹配時,都會先將所有前綴字符串拎出來,放在第一位;然后再去找所有正則表達式,作為第二位。

1、首先匹配前綴字符串。前綴字符串有以下幾種形式(舉例):

a、location = /data/ {}

b、location ^~ /data/ {}

c、location /data/ {}

 

2、然后匹配正則表達式。正則表達式的幾種形式(舉例):

d、location ~ \.html? {}

e、location ~* \.html? {}

 

a的權限最大,一旦匹配到,立即停止,直接使用對應的location。

b的權限次之,一旦匹配到,就不再檢查正則表達式。相當於打斷了后續。

 

c如果匹配到了,不會立即停止,而是會先將它存儲起來,然后繼續往下匹配。

 

d如果匹配到了,立即停止,直接使用對應的location;

d如果沒有匹配,繼續往下找。

 

e如果匹配到了,立即停止,直接使用對應的location;

e如果沒有匹配,就使用先前存儲的那個前綴字符串。

 

也就是說,location /data/ {}這種模式是等級最低的。實在匹配不到了,才勉強使用它。

 

前提是我們配置了a、b、c、d、e這五個location。

如果只配置了a、b、c,就沒有正則匹配什么事了;

如果只配置了d、e,就沒有前綴匹配什么事了。

 

那么什么叫最長匹配呢?

一個請求為:http://www.example.com/images/a.png

對於/images/a.png這個URI來說,上面的2個location中,location /images/是最長匹配。雖然location /也能匹配,但不是最長的。

由於不是精確匹配,nginx此時會先將這個最長匹配保存起來

 

如果后面配置了正則表達式,那么nginx會繼續向下匹配正則表達式。

如果后面沒有配置正則表達式,nginx就會使用剛才保存的最長的那個前綴匹配,也就是location /images/對應的地方。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM