1. 程式人生 > >Nginx知識講解——location匹配模式詳細講解

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個,立即返回結果,並退出解析過程。如果沒有匹配成功,則取一般匹配儲存的結果為準。

最後,本章用文字來進行表達效果可能不太好,請原諒小編的表達能力有限。如有不懂的地方請評論告訴小編,小編一定加以改正!!!