nginx中server name的匹配順序

2021-09-01 15:14:00 字數 1330 閱讀 5405

nginx中的server_name指令主要用於配置基於名稱虛擬主機,server_name指令在接到請求後的匹配順序分別為:1、準確的server_name匹配,例如:

server

2、以*萬用字元開始的字串:

server

3、以*萬用字元結束的字串:

server

4、匹配到的正規表示式:

server

nginx將按照1,2,3,4的順序對server name進行匹配,只有有一項匹配以後就會停止搜尋,所以我們在使用這個指令的時候一定要分清楚它的匹配順序(類似於location指令)。

來個複雜的,這樣既可以匹配泛網域名稱,又可以匹配部分以blog開頭的網域名稱

兩個都是正則,優先順序一樣,哪個匹配的最精確就會匹配到哪個

#匹配*.frady.info

server_name ~^(.+)?\.frady\.info$;

#匹配blog*.frady.info

~^blog(.+)?\.frady\.info$;

以下是理所當然的寫法,其實是錯誤的,因為*會優先於正則,所以正則處寫的都匹配不到

#匹配*.frady.info

server_name *.frady.info;

#匹配blog*.frady.info

~^blog(.+)?\.frady\.info$;

你也可能寫出的是這樣的

#匹配blog*.frady.info

~*^blog(.+)?\.frady\.info$;

用regular expressions tester測試沒有問題,放到nginx裡,然後發現報錯了

後來才想到網域名稱其實是不區分大小寫的,所以這塊是不需要nginx來處理

官方的說明:

1.exact name

2.longest wildcard name starting with an asterisk, e.g. 「*.example.org」

3.longest wildcard name ending with an asterisk, e.g. 「mail.*」

nginx負載均衡中的server name

當nginx做負載均衡的時候,後端的nginx配置裡面有這麼一段配置 server listen 80 default server server name 官網上是這麼解釋的 在catch all server示例中,可以看到奇怪的名稱 這個名字沒有什麼特別之處,它只是無數無效網域名稱中的乙個,這...

nginx安裝和Vue部署nginx中

2 因為nginx以來與gcc的編譯環境,所以,在mini centos中需要安裝編譯環境來使nginx能夠編譯起來 yum install gcc c 3 nginx的http模組需要使用pcre來解析正規表示式 yum y install pcre pcre devel 4 依賴的解壓包 yum...

nginx中的if語句

if指令 格式 if 條件判斷 一 if語句中的判斷條件 nginx 1 正規表示式匹配 等值比較 與指定正規表示式模式匹配時返回 真 判斷匹配與否時區分字元大小寫 與指定正規表示式模式匹配時返回 真 判斷匹配與否時不區分字元大小寫 與指定正規表示式模式不匹配時返回 真 判斷匹配與否時區分字元大小寫...