PHP初學者:配置Apache服務器並且設置DNS

當然主要有技術含量的是點DNS的解析,我正給我們公司負責,先查資料的說…‘

  我們通常所說的虛擬主機技術就是將一臺(或者一組)服務器的資源(系統資源、網絡帶寬、存儲空間等)按照一定的比例分割成若幹臺相對獨立的“小主機”的技術。每一臺這樣的“小主機”在功能上都可以實現WWW、FTP、Mail等基本的Internet服務,就像使用獨立的主機一樣。
 
    目前網站服務器的虛擬主機平臺使用以開放的Apache為最多,其次是微軟的Windows IIS。Apache具有跨平臺(FreeBSD/Linux/Windows/Solaris/Other UNIX)、易於維護與最佳安全性等優點。
    Apache是率先支持基於IP虛擬主機的服務器之一。 Apache 1.1及其更新版本同時支持基於IP和基於主機名的虛擬主機,不同的虛擬主機有時會被稱為基於主機(host-based) 或非IP虛擬主機(non-IP virtual hosts)。


    用Apache設置虛擬主機服務通常可以采用兩種方案:基於IP地址的虛擬主機和基於主機名字的虛擬主機,下面我們分別介紹一下它們的實現方法以及優缺點。以便大傢在具體的應用中能夠選擇最合適的實現方法。


   一、Apache實現基於IP地址的虛擬主機(每個站點擁有一個獨立IP地址)


    使用這種虛擬主機方式,首先要在服務器上為每個虛擬主機單獨設置一個IP地址。這些IP地址可以通過增加多個網卡或者在一個網卡上設立多個IP地址來完成。有瞭多個IP地址後,可以采用以下兩種方式之一來設置Apache。


1、為每個虛擬主機運行一份Apache
    采用這種方式,每一份Apache程序可以以單獨的用戶運行,因此各個虛擬主機之間互不影響。設置這種虛擬主機時,隻要為每一份Apache設置一套配置文件就可以瞭,唯一需要註意的是:必須使用“Listen”語句,強制每一份Apache 僅僅在屬於“自己”的IP地址上接收服務請求。


    優點:各個虛擬主機之間互不幹擾,安全性高。
    缺點:占用系統資源較多。


2、多個虛擬主機共享同一份Apache
    采用這種方式,各個虛擬主機共享同一份Apache,因此各個虛擬主機之間有一定的影響,尤其是執行CGI程序時,可能會帶來一些嚴重的安全問題。設置這種虛擬主機時,隻要為每一個虛擬主機設置類似如下的信息即可:
    <VirtualHost www.ghq1.com>
    DocumentRoot /www/ghq1
    …
    </VirrualHost>


    優點:占用系統資源比上一種方式少。
    缺點:安全性低,每個虛擬主機仍然需要占用一個IP地址。


  
    例如服務器一個網卡上綁定有兩個IP地址(172.16.3.40和 172.16.3.50)分別對應域名 www.ghq1.com和www.ghq2.org的服務,配置如下:


    服務器配置(apache的配置文件httpd.conf)
    Listen 80


    <VirtualHost 172.16.3.40>
    DocumentRoot /www/ghq1
    ServerName www.ghq1.com
    </VirtualHost>


    <VirtualHost 172.16.3.50>
    DocumentRoot /www/ghq2
    ServerName www.ghq2.org
    </VirtualHost>


    配置簡單說明:“Listen”默認httpd服務會監控第80號通信端口, “Listen”選項讓用戶自行指定apache 服務器監控的IP地址或通信端口。


    “DocumentRoot”:指定apache 服務器存放網頁的根目錄;“ServerName”:允許用戶自行設置主機名,這個名稱將被送到遠程連接程序,以取代安裝apache 服務器主機的真實名稱。<VirtualHost IP >和</VirtualHost>構成虛擬主機的語法結構,其中的IP就是我們在服務器上綁定的不同的IP地址,也可以是IP地址加上通信端口號(見下面的例子)。


    如果服務器有兩個IP地址(172.16.3.40和 172.16.3.50)分別對應域名 www.ghq1.com和www.ghq2.org。對每個域名,我們都希望在80端口和8080端口發佈我們的網站。可以這樣配置:


    服務器配置(apache的配置文件httpd.conf)
    Listen 172.16.3.40:80
    Listen 172.16.3.40:8080
    Listen 172.16.3.50:80
    Listen 172.16.3.50:8080


    <VirtualHost 172.16.3.40:80>
    DocumentRoot /www/ghq1-80
    ServerName www.ghq1.com
    </VirtualHost>


    <VirtualHost 172.16.3.40:8080>
    DocumentRoot /www/ghq1-8080
    ServerName www.ghq1.com
    </VirtualHost>


    <VirtualHost 172.16.3.50:80>
    DocumentRoot /www/ghq2-80
    ServerName www.ghq1.org
    </VirtualHost>


    <VirtualHost 172.16.3.50:8080>
    DocumentRoot /www/ghq2-8080
    ServerName www.ghq2.org
    </VirtualHost>


    因此,建立虛擬主機,我們要做好不同的IP對應的域名解析工作,建立相應的目錄(如/www/ghq1),將相應的主頁內容存放在相應的目錄中即可。


二、Apache實現基於主機名的虛擬主機服務(一個IP地址實現多個網站)
  
    基於主機名字的虛擬主機服務,是目前虛擬主機比較常用的一種方案。因為它不需要更多的IP地址,無須什麼特殊的軟硬件支持。而且現在的瀏覽器大都支持這種虛擬主機的實現方法。基於域名的的虛擬主機是根據客戶端提交的HTTP頭中的關於主機名的部分決定的。使用這種技術,很多虛擬主機可以享用同一個IP地址。


    基於域名的虛擬主機相對比較簡單,因為我們隻需要配置DNS服務器將每個主機名映射(CNAMES)到正確的IP地址,然後配置Apache HTTP服務器,令其辨識不同的主機名就可以瞭。基於域名的服務器也可以緩解IP地址(IPV4)不足的問題。這種方式下,各個虛擬主機共享同一份Apache,因此有CGI程序運行時,安全性也不高。


    優點:隻要一個IP地址就可以提供大量的虛擬主機服務。
    缺點:安全性差。維護這些虛擬主機時需要更改配置文件,並且需要重新啟動Apache進程才能起作用。因此不適合進行大規模的虛擬主機服務。


    如果服務器隻有一個IP地址,而在DNS中有很多映射到這個機器。我們想要在這個機器上運行www.ghq1.com和 www.ghq2.org兩個站點。在Apache服務器的配置中創建一個虛擬主機並不會自動在DNS中對主機名做相應更新。我們必須自己在DNS中添加域名來指向我們的IP地址。否則別人是無法看到我們的web 站點。


    服務器配置(apache的配置文件httpd.conf)
    # Ensure that Apache listens on port 80
    Listen 80


    # Listen for virtual host requests on all IP addresses
    NameVirtualHost *


    <VirtualHost *>
    DocumentRoot /www/ghq1
    ServerName www.ghq1.com


    # Other directives here


    </VirtualHost>


    <VirtualHost *>
    DocumentRoot /www/ghq2
    ServerName www.ghq2.org


    # Other directives here


    </VirtualHost>


    因為*(星號)匹配所有的地址,所以主服務器不接收任何請求。因為 www.ghq1.com首先出現在配置文件中,所以它擁有最高優先級,可以認為是默認或首要服務器。這意味著如果一個接受的請求不能與某個ServerName指令相匹配, 它將會由第一個VirtualHost所伺服。


    當我們的IP地址無法確定的時候,使用*是很方便的–比如說, ISP給我們配置的是動態IP地址(如ADSL撥號上網),而我們有使用瞭某種動態域名解析系統時。因為*匹配任何IP 地址,所以在這樣的情況下,不論IP地址如何變化,我們都不需要另外進行配置。上述配置就是我們在絕大多數情況下使用基於域名的虛擬主機

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *