Apache VirtualHost 虛擬主機設定

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

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

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

    LoadModule vhost_alias_module modules/mod_vhost_alias.so
    
  3. 2.X版同樣在httpd.conf找到此設定︰

    Include conf/extra/httpd-vhosts.conf
    
  4. 假設使用的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設定。

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

    NameVirtualHost *:80
    
  2. Subdomain為test.abc.com,就設為︰

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

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