繼續我的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; } }
這個時候通過瀏覽器訪問www.test.com或者127.0.0.1網頁是打不開的,必須要加上端口後才行,有興趣的可以自己動手試下。
參考資料:《實戰Nginx》