Apache VirtualHost 虛擬主機設定

為了方便管理一些設有Subdomain(子域名)的網站,特別將這些網站目錄全部移到同一個資料夾。此時我們需要設定Apache的VirtualHost(虛擬主機),和DNS。因為多個網站共用一個IP位址,所以使用最簡單的Name-based,如果有多個IP位址則可以使用IP-based。因為網路上寫的設定方法很多,我只簡單記錄幾個步驟和要稍微留意一下的地方。

先到DNS設定Subdomain,子域名為test︰

abc    IN   A   123.123.123.123
test   IN   CNAME   abc

如果Apache為1.X版,VirtualHost直接設定在httpd.conf,如為2.X版,則另外設定在httpd-vhosts.conf。先打開虛擬主機的模組,在httpd.conf的設定為︰

LoadModule vhost_alias_module modules/mod_vhost_alias.so

2.X版同樣在httpd.conf找到此設定︰

Include conf/extra/httpd-vhosts.conf

假設使用的DocumentRoot在C:\apache\www\,想將所有設定Subdomain的網站搬到C:\apache\www2\,記得一定要先在httpd.conf設定C:\apache\www2\資料夾的讀取權限,否則只設定VirtualHost的DocumentRoot是無效的,會出現403 Forbidden(禁止)的畫面。網站資料夾為test,目錄權限設為︰

<Directory "C:/apache/www2/test">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>

AllowOverride All請記得務必加上,如果未設定或設為None,將會忽略.htaccess設定。

再來就是VirtualHost的設定,第一行千萬不要被忽略,否則就沒效果了︰

NameVirtualHost *:80

Subdomain為test.abc.com,就設為︰

<VirtualHost *:80>
DocumentRoot "C:/apache/www2/test"
ServerName test.abc.com
</VirtualHost>

error和access log可自行選擇要不要加入設定,最後重新啟動Apache,此時DNS的TTL如果也已經生效,可自行測試是否設定無誤。