nginx中server的匹配順序

2022-06-08 10:09:11 字數 2091 閱讀 6533

**:

在開始處理乙個http請求時,nginx會取出header頭中的host,與nginx.conf中每個server的server_name進行匹配,以此決定到底由哪乙個server塊來處理這個請求。

server_name與host匹配優先順序如下:

1、完全匹配

2、萬用字元在前的,如*.test.com

3、在後的,如www.test.*

4、正則匹配,如~^\.www\.test\.com$

如果都不匹配

1、優先選擇listen配置項後有default或default_server的

2、找到匹配listen埠的第乙個server塊

空口無憑,驗證一下:

1、最高優先順序:完全匹配

首先,在nginx.conf中建立2個server,1個完全匹配,1個萬用字元匹配

萬用字元server放在最前,以證明完全匹配的優先順序與配置順序無關

接下來配置網域名稱對映

訪問測試:

結論:完全匹配的優先順序高於萬用字元匹配

2、第二優先順序:萬用字元在前

修改server配置,還是2個server,萬用字元在後的server放到前面,同樣是為了消除配置順序給測試帶來的影響

訪問測試

結論:萬用字元在前的優先順序高於在後的

3、第三優先順序:萬用字元在後

修改server配置,還是2個server,萬用字元在後的server放到前面,同樣是為了消除配置順序給測試帶來的影響

訪問測試

結論:萬用字元在後的優先順序高於正則匹配的server

到此,第一部分的匹配規則已經驗證完畢。接下來驗證都不匹配的情況

4、listen配置項中default的影響

配置3個server

訪問測試

結論:正則匹配雖然優先順序較低,但是仍然高於default;在都匹配不到的情況下,default開始起作用。

5、驗證default的作用域,default在匹配成功的情況下是否會影響優先順序

2個server,給優先順序低的server配置default屬性

訪問測試

結論:default只能作用於匹配不到的情況下,而且nginx.conf不可以配多個default,否則nginx重啟時候會提示錯誤

6、驗證沒有匹配成功,且沒有default的情況

2個server

訪問測試

結論:在server_name都匹配失敗的前提下,並且listen沒有default屬性,那麼埠號和server的順序將發揮作用,它會去找埠匹配的位置最靠前的server。

最終的結論就是開頭的這段話:

1、完全匹配

2、萬用字元在前的,如*.test.com

3、在後的,如www.test.*

4、正則匹配,如~^\.www\.test\.com$

如果都不匹配

1、優先選擇listen配置項後有default或default_server的

2、找到匹配listen埠的第乙個server塊

nginx中server的匹配順序

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

nginx 中server配置說明

server error page 404 404.html 指定錯誤頁面 redirect server error pages to the static page 50x.html 把後台錯誤重定向到靜態的50x.html頁面 error page 500 502 503 504 50x.ht...

nginx中server配置簡單示例

ubuntu14.04下的nginx配置 配置檔案nginx.conf server error page 500 502 503 504 50x.html location 50x.html 1 上述配置中第乙個location中的root指定與nginx同目錄下的html目錄,index指定預設...