天天看點

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

如下圖:

Nginx:虛拟主機配置

然後儲存退出,執行如下指令,重新開機該檔案的内容

source hosts      

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

Nginx:虛拟主機配置

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

Nginx:虛拟主機配置

這裡隻是舉了一個簡單的例子,實際生産肯定比這個要複雜。

(三)基于端口的虛拟主機配置

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

繼續閱讀