詳解Nginx虛擬主機配置中server_name的具體寫法
server_name指令可以設置基于域名的虛擬主機,根據(jù)請求頭部的內(nèi)容,一個ip的服務器可以配置多個域名。下面這些server_name的參數(shù)是有效的:
server_name jb51.net; server_name jb51.net chabaoo.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允許一個虛擬主機有一個或多個名字,也可以使用通配符"*"來設置虛擬主機的名字。上面的例子我們看到了很多特殊的地方:
第一組例子,首先定義server_name為jb51.net,那么來自http://jb51.net的請求就會發(fā)到該主機上。第二個例子配置了jb51.net和chabaoo.cn,那么http://jb51.net和http://chabaoo.cn的請求會發(fā)到這個主機上。
*.jb51.net和.jb51.net是等同的配置,設置該主機處理所有來自jb51.net的子域名,比如chabaoo.cn,blog.jb51.net等
第二組server_name配置nginx.*,配置服務器處理所有以nginx.開頭的請求。例如,nginx.com,jb51.net,nginx.net,nginx.baidu.com
接下來一組第一個server_name配置,設置主機處理來自三個域名的請求。nginx允許設置不是有效域名的名字。比如接下來這個配置我們可以看到三個不是有效域名的例子,localhost,litchfiled和bledington。nginx只查找請求的HTTP頭中的域名但并不判斷域名是否有效,這個例子中這些主機名可以配制在/etc/hosts中。當你在本機調(diào)試時使用非域名的主機名有時候更適合些。
最后一組例子,server_name設置為空的雙引號,它告訴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個具體的應用:
1、在一個server塊中配置多個站點:
server { listen 80; server_name ~^(www.)?(.+)$; index index.php index.html; root /data/wwwsite/$2; }
站點的主目錄應該類似于這樣的結(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)應該如下:
/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)文章
全面了解Nginx中的HTTP協(xié)議相關(guān)模塊配置
HTTP的處理是Nginx服務器的最重要功能,這里我們就帶大家來全面了解Nginx中的HTTP協(xié)議相關(guān)模塊配置,需要的朋友可以參考下2016-07-07
nginx?添加http_stub_status_module模塊
本文主要介紹了nginx?添加http_stub_status_module模塊,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-05-05
Mac使用Nginx設置代理并禁用自帶Apache的問題記錄
本文介紹如何在Mac上禁用自帶的Apache服務并安裝Nginx,首先需要關(guān)閉Apache并禁止其自啟動,接著,通過Homebrew安裝Nginx,并配置其文件和目錄,最后,介紹了如何生成SSL/自簽名證書,詳細步驟包括修改Apache配置、安裝Nginx、編輯Nginx配置文件以及驗證和重啟Nginx服務2024-09-09
Linux 系統(tǒng) nginx 服務器安裝及負載均衡配置詳解
nginx(engine x) 是一個 高性能 的 HTTP 和 反向代理 服務器、郵件代理服務器以及通用的 TCP/UDP 代理服務器。這篇文章主要介紹了Linux 系統(tǒng) nginx 服務器安裝及負載均衡配置詳解,需要的朋友可以參考下2019-07-07
Nginx使用的php-fpm的兩種進程管理方式及優(yōu)化
這篇文章主要介紹了Nginx使用的php-fpm的兩種進程管理方式及優(yōu)化,需要的朋友可以參考下2016-09-09
Nginx設置Access-Control-Allow-Origin多域名跨域?qū)崿F(xiàn)
本文主要介紹了Nginx設置Access-Control-Allow-Origin多域名跨域?qū)崿F(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-11-11
nginx訪問動態(tài)接口報錯404Not Found問題解決
本文主要介紹了nginx訪問動態(tài)接口報錯404Not Found問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03

