nginx中server的匹配順序


轉載:

在開始處理一個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放在最前,以證明完全匹配的優先級與配置順序無關

接下來配置域名映射

vim /etv/hosts

訪問測試:

結論:完全匹配的優先級高於通配符匹配

 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塊


免責聲明!

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



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