Nginx知識講解——location匹配模式詳細講解
一、引言
眾所周知在nginx.conf配置檔案中,可以配置多個虛擬主機,那麼在虛擬主機中需要配置一個location。 那這個location是有何作用呢? location有幾種匹配模式?,幾種匹配模式之間的優先順序又是怎麼樣的? 那麼,帶著這幾個問題來看今天所要講解的文章。希望大家對nginx配置檔案有進一步對了解,也希望給大家帶來幫助,謝謝!!!
二、location有何作用? 幾種匹配方式?
location有“定位”的意思,根據請求不同的URL來進行不同的處理。在虛擬主機中(server),location配置是必不可少的,可以把網站不同的部分定位到不同的處理方式上。
location大致可以分為三種匹配。
1 location = patt {} 精準匹配、2 location patt {} 一般匹配、3 location ~ patt {} 正則匹配
三、location匹配模式之間的優先順序順序
1 、精準匹配 VS 一般匹配
我們來看下這段配置,左邊是精準匹配,右邊是一般匹配。 當我們訪問/index.html的時候,按道理兩個location都能匹配上。由於精準匹配優先順序比一般匹配大,所以會訪問到/var/www/html這個目錄下的index.html頁面。
location = /index.html { location /index.html {
root /var/www/html; root /usr/local/nginx/html;
index index.html index.htm; index index.html index.htm;
} }
2、一般匹配 VS 正則匹配
如果配置中沒有精準理匹配,那麼那我們nginx會先找一般匹配,如果找到了一般匹配,nginx也不會裡面返回的結果的。而是會把這個一般匹配先記憶好,然後再去找正則匹配。如果正則匹配成功,則會覆蓋之前記憶,採用正則。反之如果正則沒有匹配上,則採用之前記憶好的規則。
下面這比較,當我們ip或者域名後面不輸入任何路徑,會預設有一個/,我們nginx先是匹配到一般匹配,然後儲存記憶。再去找正則匹配,剛剛好正則匹配也是能匹配上的,最後也是會訪問到/var/www/html目錄下。
location ~ / { location / {
root /var/www/html; root /usr/local/nginx/html;
index index.html index.htm; index index.html index.htm;
} }
3、一般匹配 VS 一般匹配
當我們只有一般匹配的時候,那我們的優先順序的順序又是什麼呢? nginx會採用匹配長度較長的一般匹配的規則來使用。當我們在瀏覽器輸入路徑後面是/index.html的時候,兩個location都會匹配上,但是其中有一個一般匹配“location /index.html”,它匹配上的字元更多,則採用它定義的規則使用。最後會訪問到/var/www/html目錄下。
location /index.html { location / {
root /var/www/html; root /usr/local/nginx/html;
index index.html index.htm; index index.html index.htm;
} }
4、總結
可能經過上面3個比較,可能描述的是太清楚,那在這裡我們在總結一下location解析過程。
1、首先判斷是否有命中精準匹配,如果有命中,則立即返回結果並結束解析過程。
2、如果沒有命中精準匹配,則進行一般匹配,如果有命中一般匹配。儲存匹配字元最多的命中結果(只儲存,不退出)
3、繼續判斷正則表示式的解析結果,按配置中表達式順序為準。從上開始匹配,一旦匹配成功1個,立即返回結果,並退出解析過程。如果沒有匹配成功,則取一般匹配儲存的結果為準。
最後,本章用文字來進行表達效果可能不太好,請原諒小編的表達能力有限。如有不懂的地方請評論告訴小編,小編一定加以改正!!!