Apache HTTP 伺服器版本 2.4
基於 IP 的虛擬主機是一種根據要求收到的 IP 位址和埠套用不同指令的方法。最常見的是用於在不同的埠或介面上提供不同的網站。
基於名稱的虛擬主機 在許多狀況中較為便利,因為它允許多個虛擬主機共用單一地址/埠。請參閱 基於名稱與基於 IP 的虛擬主機比較 來協助您做決定。
正如術語 基於 IP 指出的,伺服器對於每個基於 IP 的虛擬主機,都必須有不同的 IP 位址/埠組合。這可藉由讓機器具備多個實體網路連線,或使用由大多數現代作業系統支援的虛擬介面來達成 (詳細資訊請參閱系統文件,這些通常稱為「IP 別名」,而「ifconfig」指令最常被用於設定它們),以及/或使用多個埠號。
在 Apache HTTP 伺服器的術語中,使用單一 IP 位址但多個 TCP 埠,也稱為基於 IP 的虛擬主機。
有兩種方法可以設定 apache 來支援多個主機。一種是針對每個主機名稱執行單獨的 httpd
守護程式,另一種是執行支援所有虛擬主機的單一守護程式。
在以下情況下使用多個守護程式
使用者
、群組
、監聽
和 ServerRoot
設定。監聽
。因此,如果您需要出於任何原因監聽特定位址,則您需要監聽所有特定位址。(儘管一個 httpd
可以在 N-1 個位址中監聽,而另一個可以監聽剩餘位址。)在下列情況中使用單一 daemon
為每個虛擬主機建立一個獨立的 httpd
安裝。對於每個安裝,在組態檔中使用 監聽
指令來選擇該 daemon 服務的 IP 位址(或虛擬主機)。例如:
Listen 192.0.2.100:80
建議您使用 IP 位址而不是主機名稱(請參閱 DNS 注意事項)。
對於這種情況,單一的 httpd
將會為主要伺服器和所有虛擬主機處理要求。組態檔中的 VirtualHost
指令用於設定 ServerAdmin
、ServerName
、DocumentRoot
、ErrorLog
和 TransferLog
或 CustomLog
組態指令不同的值,以適用於每個虛擬主機。例如:
<VirtualHost 172.20.30.40:80> ServerAdmin webmaster@www1.example.com DocumentRoot "/www/vhosts/www1" ServerName www1.example.com ErrorLog "/www/logs/www1/error_log" CustomLog "/www/logs/www1/access_log" combined </VirtualHost> <VirtualHost 172.20.30.50:80> ServerAdmin webmaster@www2.example.org DocumentRoot "/www/vhosts/www2" ServerName www2.example.org ErrorLog "/www/logs/www2/error_log" CustomLog "/www/logs/www2/access_log" combined </VirtualHost>
建議您在 <VirtualHost> 指令中使用 IP 位址而不是主機名稱(請參閱 DNS 注意事項)。
特定 IP 位址或連接埠優先於其萬用字元等效項,且任何匹配的虛擬主機都優先於伺服器的基本組態。
幾乎任何組態指令都可放入 VirtualHost 指令中,但用於控制程序建立的指令和一些其他指令除外。若要找出某個指令是否可用於 VirtualHost 指令,請使用指令索引檢查內容。
如果使用suEXEC 外殼程式,SuexecUserGroup
可用於 VirtualHost 指令內部。
安全性:指定記錄檔案寫入位置時,請注意一些安全風險,前提是啟動 Apache 的使用者以外的人員有寫入他們寫入的目錄存取權。有關詳細資訊,請參閱安全提示文件。