ScarShow

< IS >

Apache - mod_vhost_alias 與 mod_userdir 設定

前言

Apache是常用的網頁伺服器,而userdir這個Module主要功能是用來讓Linux上的每個使用者擁有一個自己的網頁空間,通常都是以http://examaple.com/~username的形式呈現。另外vhost_alias則是讓網頁伺服器可以根據指向它域名來顯示不同的網頁內容,假設http://a.example.comb.examle.com都指向192.168.1.1,那麼Apache就可以根據域名來挑選網頁的根目錄/var/www/a或是/var/www/b來呈現不同的內容。

啟用Module

一般在Apache安裝完成後這兩個Module通常都是未啟用的,所以在使用前必須去啟用它在這邊我們所使用Ubuntu 12.04 LTS作為預設環境,在Ubuntu中有兩種啟用方式。

內建指令

# 啟用
sudo a2enmod vhost_alias
sudo a2enmod userdir

# 停用
sudo a2dismod module_name

手動啟用

cd /etc/apache2/mod-enable

sudo ln -s ../mod-available/vhost_alias.load
sudo ln -s ../mod-available/userdir.load
sudo ln -s ../mod-available/userdir.conf

使用內建指令跟手動建立連結是一樣的。

設定

假設a.example.com以及b.example.com都指向192.168.1.1,但只有b.example.com需要使用userdir我們可以這樣設定。

以下內容取自系統內建設定檔並稍做修改。

a.example.com

# a.example.com config

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    # Virtual Host Alias
    ServerName a.example.com

    DocumentRoot /var/www/a
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/a>
        Options -Indexes -FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

b.example.com

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    # Domain Name Setting
    ServerName b.example.com

    DocumentRoot /var/www/b
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/b>
        Options -Indexes -FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    # User Directory Setting
    <IfModule mod_userdir.c>
        UserDir htdocs /home/*/htdocs
        UserDir disabled root

        <Directory /home/*/htdocs>
            AllowOverride FileInfo AuthConfig Limit
            Options MultiViews -Indexes SymLinksIfOwnerMatch IncludesNoExec
            <Limit GET POST OPTIONS>
                Order allow,deny
                Allow from all
            </Limit>
            <LimitExcept GET POST OPTIONS>
                Order deny,allow
                Deny from all
            </LimitExcept>
        </Directory>
    </IfModule>
    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

vhost_alias的設定必須包含在<VirtualHost *:80></VirtualHost>之中,並且加入對應的域名設定ServerName example.com,這樣vhost_alias才會生效。

接著我們將userdir的設定加入需要使用的Virtual Host的設定檔中,UserDir htdocs /home/*/htdocs用來指定使用者的網頁根目錄名稱以及目錄位置、UserDir diabled root則是讓root不能使用User Directory

接著我們將系統內建的User Directory設定取消,把/etc/apache2/mod-enabled/userdir.conf刪除或是將內容註解都可以。

最後重新啟動Apache就完成設定了。

sudo service apache2 restart

結語

如果需要更詳細的設定可以參考官方的文件。