繼續我的Nginx學習之旅,今天談談虛拟主機的配置。那何為虛拟主機呢?虛拟主機使用的是特殊的軟硬體技術,它把一台運作在網際網路上的伺服器主機分成一台台“虛拟”的主機,每台虛拟主機都可以是一個獨立的網站,可以具有獨立的域名,具有完整的Internet伺服器功能,同一台主機上的虛拟主機之間是完全獨立的。利用虛拟主機,不用為每個要運作的網站提供一台單獨的Nginx伺服器或單獨運作一組Nginx程序,虛拟主機提供了在同一台伺服器,同一組Nginx程序上運作多個網站的功能。跟Apache一樣,Nginx也可以配置多種類型的虛拟主機,一是基于IP的虛拟主機,二是基于域名的虛拟主機,三是基于端口的虛拟主機。
(一)配置基于IP的虛拟主機
Linux作業系統準許添加IP别名,即可以在一塊實體網卡上綁定多個IP位址。這樣就能夠在使用單一網卡的同一伺服器上運作多個基于IP的虛拟主機。設定IP别名也非常簡單,隻需配置系統上的網卡接口,讓它監聽額外的IP位址。在Linux系統上可以使用标準的網絡配置工具(比如ifconfig和route指令)添加IP别名。使用ifconfig指令檢視該伺服器的IP位址。
本地回環代表裝置的虛拟接口,是以預設被看作是永遠不會宕掉的接口,它的主要作用有兩個:一是測試本機的網絡配置,能PING通127.0.0.1說明本機的網卡和IP協定安裝都沒有問題;二是某些SERVER/CLIENT的應用程式在運作時須調用伺服器上的資源,一般要指定SERVER的IP位址,但當該程式要在同一台機器上運作且沒有别的SERVER時,就可以把SERVER的資源裝在本機上,SERVER的IP位址設為127.0.0.1也同樣可以運作。
如果要在eth0網卡裝置上添加一個IP别名192.168.1.223可以通過ifconfig和route指令來進行:
ifconfig eth0:0 192.168.1.223 broadcast 192.168.1.255 netmask 255.255.255.0 up
或者
route add -host 192.168.1.223 dev eth0:0
eth0:0表示eth0網卡的第1個虛拟ip,當然也可以開第二個第三個,依次為eth0:1,eth0:2
broadcast後面跟的是廣播位址
netmask後面跟的是子網路遮罩
up表示激活
dev後面表示的裝置名
如果上面指令不成功,看看是不是權限問題,切換到root下試試
通過ifconfig和route配置的IP别名在伺服器重新開機後會消失,可以将這兩條ifconfigt 和 route 指令添加到/etc/rc.local檔案中,讓系統開機時自動運作
/sbin/ifconfig eth0:0 192.168.1.223 broadcast 192.168.1.255 netmask 255.255.255.0 up
/sbin/route add -host 192.168.1.223 dev eth0:0
為什麼是/sbin/ifconfig。因為這些指令的可執行檔案在/sbin目錄下,可以用whereis指令檢視。
清除虛拟IP可用以下指令:
ifconfig eth0:x down
x表示虛拟網絡的接口。
ip addr del v_ip dev eth0
v_ip表示所建立的虛拟IP
建設已經建立了兩個虛拟ip,分别為192.168.8.16,192.168.8.18,下面看看如何配置這兩個虛拟IP
http {
include mime.types;
default_type application/octet-stream;
keepalive_timeout 65;
access_log log/server1.access.log combined;
server {
listen 192.168.8.16:80; #監聽的IP和端口
server_name 192.168.8.16; #主機名稱
location / {
index index.html index.htm;
root /data0/hrdocs/server1;
}
}
server {
listen 192.168.8.18:80;
server_name 192.168.8.18;
location / {
index index.html index.htm;
root /data0/hrdocs/server1;
}
}
一個Server{....} 就是一個虛拟主機,如果本配置多個虛拟主機,建立多段server{}配置即可非常友善,監聽的IP和端口,也可以不寫IP位址,隻寫端口,把它配置成“listen 80”,則表示監聽該伺服器上所有IP的80端口可通過server_name區分不同的虛拟主機
(二)基于域名的虛拟主機
基于域名的虛拟主機是最常見的一種虛拟主機。隻需配置你的DNS伺服器,将每個主機名映射到正确的lP位址,然後配置Nginx伺服器,令其識别不同的主機名就可以了。這種虛拟主機技術,使很多虛拟主機可以共享同一個lP位址,有效解決了lP位址不足的問題。是以,如果沒有特殊要求使你必須用一個基于lP的虛拟主機,最好還是使用基于域名的虛拟主機。
我們可以通過編輯/etc/hosts加入虛拟域名以便解析,來測試一下。在hosts檔案中加入
127.0.0.2 www.test.com
如下圖:

然後儲存退出,執行如下指令,重新開機該檔案的内容
source hosts
然後ping指令做一下小測試,看127.0.0.2通不通
從結果上來看,ping 127.0.0.2 和www.test.com 都是通的。接下來配置Nginx。配置如下:
server {
listen 80;
server_name www.test.com;
location / {
root /home/liulonghua/下載下傳/conFusion;
index index.html;#當然如果你有更好的模闆HTML檔案,也可以換的,改下root路徑就行
}
}
然後儲存退出,用nginx -t 測試配置是否有誤,無誤的話執行下面指令重新開機Nginx
service nginx restart
然後打開浏覽器,輸入網站www.test.com。下圖是我的測試結果
這裡隻是舉了一個簡單的例子,實際生産肯定比這個要複雜。
(三)基于端口的虛拟主機配置
使用端口來區分,浏覽器使用域名或ip位址:端口号
server{
listen 8080;
server_name www.test.com;
location / {
root /home/liulonghua/下載下傳/conFusion;
index index.html;
}
}
server{
listen 9090;
server_name 127.0.0.1;
location / {
root /usr/share/nginx/html;
index index.html;
}
}