nginx 虛擬主機(jī)原理和配置
虛擬主機(jī)與域名解析
虛擬主機(jī)使用特殊的軟硬件技術(shù),把一臺(tái)運(yùn)行在因特網(wǎng)上的服務(wù)器主機(jī)分成一臺(tái)臺(tái)“虛擬”的主機(jī),每一臺(tái)虛擬主機(jī)都具有獨(dú)立的域名,具
有完整的 Internet 服務(wù)器(WWW、FTP、Email 等)功能,虛擬主機(jī)之間完全獨(dú)立,并可由用戶自行管理,在外界看來,每一臺(tái)虛擬主機(jī)
和一臺(tái)獨(dú)立的主機(jī)完全一樣。
域名解析就是域名到 IP 地址的轉(zhuǎn)換過程,IP 地址是網(wǎng)路上標(biāo)識(shí)站點(diǎn)的數(shù)字地址,為了簡(jiǎn)單好記,采用域名來代替 ip 地址標(biāo)識(shí)站點(diǎn)地址,。
域名的解析工作由 DNS 服務(wù)器完成。
虛擬主機(jī)原理
虛擬主機(jī)是為了在同一臺(tái)物理機(jī)器上運(yùn)行多個(gè)不同的網(wǎng)站,提高資源利用率引入的技術(shù)。
一般的 web 服務(wù)器一個(gè) ip 地址的 80 端口只能正確對(duì)應(yīng)一個(gè)網(wǎng)站。web 服務(wù)器在不使用多個(gè) ip 地址和端口的情況下,如果需要支持多個(gè)
相對(duì)獨(dú)立的網(wǎng)站就需要一種機(jī)制來分辨同一個(gè) ip 地址上的不同網(wǎng)站的請(qǐng)求,這就出現(xiàn)了主機(jī)頭綁定的方法。簡(jiǎn)單的說就是,將不同的網(wǎng)
站空間對(duì)應(yīng)不同的域名,以連接請(qǐng)求中的域名字段來分發(fā)和應(yīng)答正確的對(duì)應(yīng)空間的文件執(zhí)行結(jié)果。舉個(gè)例子來說,一臺(tái)服務(wù)器 ip 地址為
10.0.0.12,有兩個(gè)域名和對(duì)應(yīng)的空間在這臺(tái)服務(wù)器上,使用的都是 10.0.0.12 的 80 端口來提供服務(wù)。如果只是簡(jiǎn)單的將兩個(gè)域名 A 和 B
的域名記錄解析到這個(gè) ip 地址,那么 web 服務(wù)器在收到任何請(qǐng)求時(shí)反饋的都會(huì)是同一個(gè)網(wǎng)站的信息,這顯然達(dá)不到要求。接下來我們使
用主機(jī)頭綁定域名 A 和 B 到他們對(duì)應(yīng)的空間文件夾 C 和 D。當(dāng)含有域名 A 的 web 請(qǐng)求信息到達(dá) 10.0.0.12 時(shí),web 服務(wù)器將執(zhí)行它對(duì)應(yīng)
的空間 C 中的首頁(yè)文件,并返回給客戶端,含有域名 B 的 web 請(qǐng)求信息同理,web 服務(wù)器將執(zhí)行它對(duì)應(yīng)的空間 D 中的首頁(yè)文件,并返回
給客戶端,所以在使用主機(jī)頭綁定功能后就不能使用 ip 地址訪問其上的任何網(wǎng)站了,因?yàn)檎?qǐng)求信息中不存在域名信息,所以會(huì)出錯(cuò)。
虛擬主機(jī)的配置
配置nginx.conf
# 在http模塊下添加多個(gè)server,監(jiān)聽不同的域名
...
http {
...
# 虛擬主機(jī)test80.xlyw.top
server {
#監(jiān)聽端口
listen 80;
#域名,可以有多個(gè),用空格隔開
server_name test80.xlyw.top;
#配置根目錄以及默認(rèn)頁(yè)面
location / {
root /www/test80;
index index.html index.htm;
}
#出錯(cuò)頁(yè)面配置
error_page 500 502 503 504 /50x.html;
#/50x.html文件所在位置
location = /50x.html {
root html;
}
}
# 虛擬主機(jī)test81.xlyw.top
server {
#監(jiān)聽端口
listen 80;
#域名,可以有多個(gè),用空格隔開
server_name test81.xlyw.top;
#配置根目錄以及默認(rèn)頁(yè)面
location / {
root /www/test81;
index index.html index.htm;
}
#出錯(cuò)頁(yè)面配置
error_page 500 502 503 504 /50x.html;
#/50x.html文件所在位置
location = /50x.html {
root html;
}
}
http {
...
#虛擬主機(jī)的配置
server {
#監(jiān)聽端口
listen 80;
#域名,可以有多個(gè),用空格隔開
server_name localhost;
#配置根目錄以及默認(rèn)頁(yè)面
location / {
root /www/test80;
index index.html index.htm;
}
#出錯(cuò)頁(yè)面配置
error_page 500 502 503 504 /50x.html;
#/50x.html文件所在位置
location = /50x.html {
root html;
}
}
#虛擬主機(jī)的配置
server {
#監(jiān)聽端口
listen 81;
#域名,可以有多個(gè),用空格隔開
server_name localhost;
#配置根目錄以及默認(rèn)頁(yè)面
location / {
root /www/test81;
index index.html index.htm;
}
#出錯(cuò)頁(yè)面配置
error_page 500 502 503 504 /50x.html;
#/50x.html文件所在位置
location = /50x.html {
root html;
}
}
}