nginx匹配规则_Nginx系列之server_name定义与匹配规则
Nginx系列之server_name定義與匹配規(guī)則
server_name用來(lái)指定請(qǐng)求中的Host頭部,在上一節(jié)的基于域名的虛擬機(jī)中,nginx匹配的規(guī)則就是根據(jù)server_name的不同,結(jié)合請(qǐng)求頭的Host頭部,來(lái)決定請(qǐng)求的路由目標(biāo)。server_name有三種不同的配置格式,且不用配置格式的優(yōu)先級(jí)也不相同。接下來(lái)我們學(xué)習(xí)一下具體的配置格式與匹配順序。
1. server_name的配置格式之通配符匹配
# nginx.confserver { listen 80; server_name *.example.org; ...}server { listen 80; server_name mail.*; ...}通配符格式中的*號(hào)只能在域名的開(kāi)頭或結(jié)尾,并且*號(hào)兩側(cè)只能是.,所以www.*.example.org和w*.example.org是無(wú)效的。*號(hào)可以匹配多個(gè)域名部分,*.example.org不僅與www.example.org匹配,而且也與www.sub.example.org匹配。.example.org是比較特殊的通配符格式, 可以同時(shí)匹配確切名稱(chēng)example.org和通配符名稱(chēng)*.example.org。
2. server_name的配置格式之正則匹配
server { listen 80; server_name ~^(?<user>.+)\.example\.net$; ...}正則匹配格式,必須以~開(kāi)頭,比如:server_name ~^www\d+\.example\.net$;。如果開(kāi)頭沒(méi)有~,則nginx認(rèn)為是精確匹配,或者如果匹配字符中含有*號(hào),則會(huì)被認(rèn)為是通配符匹配,不過(guò)非法的通配符格式。在邏輯上,需要添加^和$錨定符號(hào)。注意,正則匹配格式中.為正則元字符,如果需要匹配.,則需要反斜線轉(zhuǎn)義。如果正則匹配中含有{和}則需要雙引號(hào)引用起來(lái),避免nginx報(bào)錯(cuò),如果未加雙引號(hào),則nginx會(huì)報(bào)如下錯(cuò)誤:directive "server_name" is not terminated by ";" in ...。正則表達(dá)式命名捕獲的變量可以在nginx進(jìn)行引用,下面示例:
server { server_name ~^(www\.)?(?<domain>.+)$; location / { root /sites/$domain; }}正則表達(dá)式捕獲也可以通過(guò)數(shù)字進(jìn)行引用,下面示例:
server { server_name ~^(www\.)?(.+)$; location / { root /sites/$2; }}數(shù)字引用不推薦使用,此種方式容易被覆蓋。
3. server_name的配置格式之精確匹配
server { listen 80; server_name example.org www.example.org; ...}精確匹配格式指的除了通配符匹配和正則匹配之外的格式,就這么簡(jiǎn)單。
4. 特殊匹配格式
1. server_name ""; 匹配Host請(qǐng)求頭不存在的情況。2. server_name "-"; 無(wú)任何意義。3. server_name "*"; 它被錯(cuò)誤地解釋為萬(wàn)能的名稱(chēng)。 它從不用作通用或通配符服務(wù)器名稱(chēng)。相反,它提供了server_name_in_redirect指令現(xiàn)在提供的功能。 現(xiàn)在不建議使用特殊名稱(chēng)“ *”,而應(yīng)使用server_name_in_redirect指令。5. 匹配順序
1. 精確的名字2. 以*號(hào)開(kāi)頭的最長(zhǎng)通配符名稱(chēng),例如 *.example.org3. 以*號(hào)結(jié)尾的最長(zhǎng)通配符名稱(chēng),例如 mail.*4. 第一個(gè)匹配的正則表達(dá)式(在配置文件中出現(xiàn)的順序)6. 優(yōu)化
1. 盡量使用精確匹配;2. 當(dāng)定義大量server_name時(shí)或特別長(zhǎng)的server_name時(shí),需要在http級(jí)別調(diào)整server_names_hash_max_size和server_names_hash_bucket_size,否則nginx將無(wú)法啟動(dòng)。個(gè)人博客:https://www.aiopsclub.com/
總結(jié)
以上是生活随笔為你收集整理的nginx匹配规则_Nginx系列之server_name定义与匹配规则的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python用户界面导入图片_pytho
- 下一篇: python json解析方法_Pyth