Nginx中的一些匹配順序

2022-07-12 07:12:10 字數 1699 閱讀 9205

nginx中經常需要做各種配置,總結如下:

1、server_name配置

nginx中的server_name指令主要用於配置基於名稱虛擬主機,同乙個nginx虛擬主機中,可以繫結多個server_name,各個網域名稱用空格隔開即可。如下:  

server

如果server_name有多個,那麼通過**如$_server["server_name"]獲取的始終將是nginx server_name配置中的第乙個網域名稱,第乙個網域名稱就相當於apache虛擬主機配置中的servername,後面的網域名稱就相當於apache的serveralias。

如果nginx中有多個server塊,那麼請求匹配server_name的順序如下:

首先匹配準確的server_name,如:server_name  test.com www.test.com;

然後匹配以*萬用字元開始的server_name,如:server_name  *.test.com;

然後匹配以*萬用字元結束的server_name,如:server_name  www.test.*;

最後匹配正規表示式形式的server_name,如:server_name ~^(?.+)\.test\.com$;

以上只有有一項匹配到以後就會停止搜尋。

2、location配置

location的語法規則如下: location [=|~|~*|^~] /uri/ .

在nginx中location分為兩類:普通location和正則location。普通 location 」是以「 = 」或「 ^~ 」為字首或者沒有任何字首的 /uri/,包括「/」;「正則 location 」是以「 ~ 」或「 ~* 」為字首的 /uri/ 。

那麼如果乙個 server 塊中編寫了多個 location 的時候,nginx對於客戶端請求匹配順序如何呢?

官網說明如下:先匹配普通location,取的最大字首匹配,再匹配正則location,如果匹配到則按照正則匹配,如果有多個正則可以匹配到,則按照第乙個匹配結果處理,如果正則匹配失敗則使用普通location的最大字首匹配。nginx也設定了幾種機制可以打斷這種順序,分別是「^~ 」、「= 」或者location精確匹配。

簡單的講順序如下:

首先普通location「=」精確匹配;

然後普通location的url精確匹配;

然後普通location」^~"配置;

然後正則匹配;

然後其他普通location匹配;

最後「/」通用匹配

3、rewirte配置

rewrite指令的最後一項引數為flag標記,flag標記有一下四種,說明一下:

1> last

標記在本條rewrite規則執行完畢後,會對其所在server標籤重新發起請求。使用last實現uri重寫後,瀏覽器位址列不變。使用alias指令必須用last標記。

2> break

標記在本條規則匹配完成後,終止匹配,不再匹配後面的規則。使用break實現uri重寫後,瀏覽器位址列不變。使用proxy_pass指令時,需要使用break標記。

3> redirect

返回302臨時重定向,瀏覽器位址會顯示跳轉後的url位址。

4> permanent

返回301永久重定向,瀏覽器位址會顯示跳轉後的url位址。

nginx中server的匹配順序

在開始處理乙個http請求時,nginx會取出header頭中的host,與nginx.conf中每個server的server name進行匹配,以此決定到底由哪乙個server塊來處理這個請求。server name與host匹配優先順序如下 1 完全匹配 2 萬用字元在前的,如 test.co...

nginx中server的匹配順序

在開始處理乙個http請求時,nginx會取出header頭中的host,與nginx.conf中每個server的server name進行匹配,以此決定到底由哪乙個server塊來處理這個請求。server name與host匹配優先順序如下 1 完全匹配 2 萬用字元在前的,如 test.co...

nginx的location匹配順序

總原則 先字首字串,再正規表示式。不管配置檔案中的location順序怎麼寫,在匹配時,都會先 將所有字首字串拎出來,放在第一位 然後再去找所有正規表示式,作為第二位。1 首先匹配字首字串。字首字串有以下幾種形式 舉例 a location data b location data c locati...