本篇的目的,是說明如何使用最簡單的方式在你的網頁伺服器 (Apache) 上新增一個虛擬主機 (Virtual Host),讓你只要建一個目錄,或新增一個本機用戶,就可以建立虛擬主機,並且可自動分割 Log 檔 (以下之設定牽涉到 Apache 及 DNS 的觀念,最好也有自行架設 DNS 服務)。

修改 Apache 設定
這部份需修改 Apache 的設定檔,使它以 VirtualDocumentRoot 及 VirtualScriptAlias 建立虛擬主機,並設定 Log 檔的輸出格式。執行步驟:

備份 Apache 的設定檔:
cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.old

編輯 /etc/httpd/conf/httpd.conf,

搜尋: UseCanonicalName On

改成:UseCanonicalName Off

VirtualDocumentRoot /home/%0/public_html
VirtualScriptAlias /home/%0/public_html/cgi-bin

搜尋:

LogFormat "%{User-agent}i" agent在下一行加入:

LogFormat "%V %h %l %u %t \"%r\" %>s %b" vcommon
LogFormat "%V %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vcombined如果你有使用 Awstats,請搜尋:
CustomLog logs/access_log combined改成:

CustomLog logs/vhost.log vcombined如果你沒有使用 Awstats,請搜尋:

CustomLog logs/access_log common改成:

CustomLog logs/vhost.log vcommon搜尋下列這一行,將它刪除或設成註解:
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"搜尋下列這些設定,將它刪除或設成註解:

AllowOverride None
Options None
Order allow,deny
Allow from all
如果當初已經有設定虛擬主機,請搜尋下面這一行,將它刪除或設成註解:
NameVirtualHost *然後取消所有虛擬主機的設定 (同樣將它刪除或設成註解):


.
.
.
儲存修改。
重新啟動 Apache 伺服器:
service httpd restart
分割虛擬主機的 Log 檔
這部份需下載本人寫的 Log 檔分割程式,本程式會將 vhost.log 依照 VirtualHost 的網址及月份,分割儲存成多個 log 檔。安裝步驟:

從本站下載 split-vhost.pl 至 /usr/bin/
cd /usr/bin
wget ftp://www.vixual.net/source/log/split-vhost.pl
chmod 755 split-vhost.pl
如有必要,請自行修改 split-vhost.pl 內的 $LogFile,$TempFile,$TargetDir 參數。

如果你有使用 Awstats,請修改 Awstats 下虛擬主機的設定檔(假設你的虛擬主機的名稱為 “host.domain.tld”),將 LogFile 的參數改成:
/var/log/httpd/host.domain.tld.%YYYY-1%MM-1.log其中的 “host.domain.tld” 是指你的虛擬主機的名稱,請依你的實際狀況輸入。

請於 [/etc/cron.hourly] 新增指令檔 “split-vhost.sh”,內容如下:
#!/bin/sh
/usr/bin/split-vhost.pl
/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
更改檔案屬性為 755:
chmod 755 /etc/cron.hourly/split-vhost.sh
關於 DNS 設定
修改 DNS 的目的,就是要讓 *.domain.tld 都可以自動指向目前的主機,避免每次新增虛擬主機時,都要再修改及重新啟動 DNS。設定步驟:

編輯現有網域的 DNS 記錄檔 (此記錄檔通常位於 /var/named/),假設主機的 IP 為 “192.168.1.10″,則在記錄檔的最後一行加上:
* IN A 192.168.1.10其中的 “192.168.1.10″ 是指你的主機的 IP 位址,請依你的實際狀況輸入。

重新啟動 DNS 服務:
service named restart
增加虛擬主機
完成上列步驟之後,如要建立虛擬主機,可使用下列兩種方式 (假設要新增 “virtual.domain.tld” ):

方式一,以建立子目錄的方式新增虛擬主機,子目錄的名稱就是虛擬主機的名稱:
mkdir /home/virtual.domain.tld
mkdir /home/virtual.domain.tld/public_html
mkdir /home/virtual.domain.tld/public_html/cgi-bin
方式二,以新增用戶的方式新增虛擬主機,用戶的名稱就是虛擬主機的名稱 (建議使用):
useradd virtual.domain.tld
su virtual.domain.tld
mkdir /home/virtual.domain.tld/public_html
mkdir /home/virtual.domain.tld/public_html/cgi-bin
exit
passwd virtual.domain.tld
輸入密碼後即完成。

使用以上兩種方式建立之 [/home/virtual.domain.tld/public_html] 子目錄是用來放網頁的,而目錄下的 [cgi-bin] 則是用來放置 CGI 程式。建立好虛擬伺服器之後,並不需要重新啟動 Apache 或 DNS 喔!

重建原來的網頁伺服器
最後,由於使用以上的方式設定 Apache 之後,原來的網頁伺服器便沒有作用了 (不知你發現了沒?),所以,我們必須以符號連結的方式來重建原來的伺服器(假設原來的網址及 IP 分別為 “host.domain.tld” 及 “192.168.1.10″):

mkdir /home/host.domain.tld
ln -s /var/www/html /home/host.domain.tld/public_html
ln -s /var/www/cgi-bin /home/host.domain.tld/public_html/cgi-bin
ln -s /home/host.domain.tld /home/192.168.1.10
參考網址
Apache Virtual Host 最簡單的做法∞
Apache Module mod_vhost_alias∞
Apache Module mod_log_config∞
Splitting up your log files∞
創作者介紹

新‧夢想

kevin0523 發表在 痞客邦 PIXNET 留言(0) 人氣()