Apache - mod_vhost_alias 與 mod_userdir 設定
前言
Apache是常用的網頁伺服器,而userdir
這個Module主要功能是用來讓Linux上的每個使用者擁有一個自己的網頁空間,通常都是以http://examaple.com/~username
的形式呈現。另外vhost_alias
則是讓網頁伺服器可以根據指向它域名來顯示不同的網頁內容,假設http://a.example.com
與b.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
結語
如果需要更詳細的設定可以參考官方的文件。