詳解Nginx虛擬主機配置中server_name的具體寫法
server_name指令可以設(shè)置基于域名的虛擬主機,根據(jù)請求頭部的內(nèi)容,一個ip的服務(wù)器可以配置多個域名。下面這些server_name的參數(shù)是有效的:
server_name jb51.net; server_name jb51.net www.dbjr.com.cn; server_name *.jb51.net; server_name .jb51.net; server_name nginx.*; server_name jb51.netg bucknell.net brackley.org; server_name localhost litchfield bleddington; server_name "";
多個域名之間以空格分隔。nginx允許一個虛擬主機有一個或多個名字,也可以使用通配符"*"來設(shè)置虛擬主機的名字。上面的例子我們看到了很多特殊的地方:
第一組例子,首先定義server_name為jb51.net,那么來自http://jb51.net的請求就會發(fā)到該主機上。第二個例子配置了jb51.net和www.dbjr.com.cn,那么http://jb51.net和http://www.dbjr.com.cn的請求會發(fā)到這個主機上。
*.jb51.net和.jb51.net是等同的配置,設(shè)置該主機處理所有來自jb51.net的子域名,比如www.dbjr.com.cn,blog.jb51.net等
第二組server_name配置nginx.*,配置服務(wù)器處理所有以nginx.開頭的請求。例如,nginx.com,jb51.net,nginx.net,nginx.baidu.com
接下來一組第一個server_name配置,設(shè)置主機處理來自三個域名的請求。nginx允許設(shè)置不是有效域名的名字。比如接下來這個配置我們可以看到三個不是有效域名的例子,localhost,litchfiled和bledington。nginx只查找請求的HTTP頭中的域名但并不判斷域名是否有效,這個例子中這些主機名可以配制在/etc/hosts中。當你在本機調(diào)試時使用非域名的主機名有時候更適合些。
最后一組例子,server_name設(shè)置為空的雙引號,它告訴nginx捕捉所有沒有hostname的請求,或者hostname沒有在其它server_name中指定的。
總結(jié)一下,server_name指令在接到請求后的匹配順序分別為:
1、準確的server_name匹配,例如:
server { listen 80; server_name domain.com www.domain.com; ...}
2、以通配符開始的字符串:
server { listen 80; server_name .domain.com;...}
3、以通配符結(jié)束的字符串:
server { listen 80; server_name www.; ...}
4、匹配正則表達式:
server { listen 80; server_name ~^(?.+).domain.com$;...}
nginx將按照1,2,3,4的順序?qū)erver name進行匹配,只有有一項匹配以后就會停止搜索,所以我們在使用這個指令的時候一定要分清楚它的匹配順序(類似于location指令)。
server_name指令一項很實用的功能便是可以在使用正則表達式的捕獲功能,這樣可以盡量精簡配置文件,畢竟太長的配置文件日常維護也很不方便。下面是2個具體的應(yīng)用:
1、在一個server塊中配置多個站點:
server { listen 80; server_name ~^(www.)?(.+)$; index index.php index.html; root /data/wwwsite/$2; }
站點的主目錄應(yīng)該類似于這樣的結(jié)構(gòu):
/data/wwwsite/domain.com/data/wwwsite/nginx.org/data/wwwsite/baidu.com/data/wwwsite/google.com
這樣就可以只使用一個server塊來完成多個站點的配置。
2、在一個server塊中為一個站點配置多個二級域名。
實際網(wǎng)站目錄結(jié)構(gòu)中我們通常會為站點的二級域名獨立創(chuàng)建一個目錄,同樣我們可以使用正則的捕獲來實現(xiàn)在一個server塊中配置多個二級域名:
server { listen 80; server_name ~^(.+)?.domain.com$; index index.html; if ($host = domain.com){ rewrite ^ http://www.domain.com permanent; } root /data/wwwsite/domain.com/$1/;}
站點的目錄結(jié)構(gòu)應(yīng)該如下:
/data/wwwsite/domain.com/www//data/wwwsite/domain.com/nginx/
這樣訪問www.domain.com時root目錄為/data/wwwsite/domain.com/www/,nginx.domain.com時為/data/wwwsite/domain.com/nginx/,以此類推。
后面if語句的作用是將domain.com的方位重定向到www.domain.com,這樣既解決了網(wǎng)站的主目錄訪問,又可以增加seo中對www.domain.com的域名權(quán)重。
相關(guān)文章
Dockerfile打包nginx鏡像的實現(xiàn)步驟
本文主要介紹了Dockerfile打包nginx鏡像的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-10-10Nginx性能優(yōu)化之Gzip壓縮設(shè)置詳解(最大程度提高頁面打開速度)
這篇文章主要介紹了Nginx性能優(yōu)化之Gzip壓縮設(shè)置詳解(最大程度提高頁面打開速度),需要的朋友可以參考下2022-01-01Nginx反向代理及負載均衡如何實現(xiàn)(基于linux)
這篇文章主要介紹了Nginx反向代理及負載均衡如何實現(xiàn)(基于linux),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09