Nginx:虛擬主機配置

    繼續我的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

如下圖:

wKioL1hIDFCTwcGaAACLpfA6iWk388.png-wh_50


然後保存退出,執行如下命令,重啓該文件的內容

source hosts

然後ping命令做一下小測試,看127.0.0.2通不通

wKiom1hIDRTyh3NqAAGaZ4fGEl8482.png-wh_50

從結果上來看,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。下圖是我的測試結果

wKiom1hID1CS0u84AADws4JOjIs743.png-wh_50

這裏只是舉了一個簡單的例子,實際生產肯定比這個要複雜。


(三)基於端口的虛擬主機配置

  使用端口來區分,瀏覽器使用域名或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》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章