「多個網站或 Domain 架在同一個 IP 上」在 Apache 的術語中稱作 Name-based Virtual Host。另外還有 IP-based Virtual Host,不過比較不常用,Name-based Virtual Host 也才是本文的介紹主題 (Name-based 顧名思義即指 Domain Name)。
作法很簡單,若假設 Apache Server 已經正常地運作了,只需修改 httpd.conf 檔案中間的幾個部份。
以下以將
www.example1.com 與
www.example2.com 架在同一個 Apache Server 底下的設定作為例子。
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.example1.com
# Other directives here / 可於此加入其他所需目錄,例如 CGI Script 的目錄
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /www/example2
ServerName www.example2.org
# Other directives here
</VirtualHost>
若進來的 HTTP Request 的 ServerName 不是上述二者,以置於前的
www.example1.com 為主。
另請注意:不同的 Linux Distribution 的 Apahce 設定方式略有不同,例如 openSUSE 的設定主要是在
/etc/apache2/default-server.conf(需在檔中(最後)加入 NameVirtualHost *:80),
同時 Virtual Host 的設定是在
/etc/apache2/vhosts.d/*.conf
(需在該目錄新增 .conf 檔,加上上述之 Script)。因此,不同的 Linux Distribution 請注意其中可能的差別,但其原理相同。Refereces:
Official Page:
VirtualHost ExamplesOfficial Paeg:
Name-based Virtual Host Support