實作 Name-Based VirtualHost
若你管理的主機同實有多個網站,那麼你可以使用 Name-Based 的做法來做實作 VirtualHost,這種應用常用來做主機代管,或是在
IP 數量不足時,多個網站同時指到同一個 IP,如此就可以達到一個 IP 多個網址的功能。
思考:
要使用 VirtualHost 之前,首先最重要的就是對 DNS 要做正確的設定,比方說原本 www.abc.com.tw 這個網址是 11.22.33.44,而同時有
www1.abc.com.tw 和 www2.abc.com.tw 也是指到 11.22.33.44,如此就必需在 DNS 裡面為 www1
和 www2 做一筆 A record 並指到 11.22.33.44 才可以。
DNS 設定完成之後,需設定 Apache 來啟動 Virtual Host 的功能,兩方相配合才可以達到所需的成果。
實作:
目前環境在 www.l-penguin.idv.tw 上,要為 steven 和 john 多做他們專屬的網址,分別為 steven.l-penguin.idv.tw
和 john.l-penguin.idv.tw。在大家輸入他們的網址之後,可以分別看到他們的首頁而不是看到 www.l-penguin.idv.tw
的首頁。
DNS 設定:
root # vi /var/named/db.l-penguin.idv.tw
--------------------------------------------------
steven 10 IN A 192.168.1.105
john 10 IN A 192.168.1.105
--------------------------------------------------
root # service named restart |
設定好之後,再來看看 steven.l-penguin.idv.tw 和 john.l-penguin.idv.tw 是否生效:
root # host steven.l-penguin.idv.tw; host john.l-penguin.idv.tw
steven.l-penguin.idv.tw has address 192.168.1.105
john.l-penguin.idv.tw has address 192.168.1.105
root # |
目錄設定:
因為 steven 和 john 為使用者,所以要設定他們的家目錄,這次範例是放在 /srv/www/steven 和 /srv/www/john
裡。
root # ls -ld /srv/www/{steven,john}
drwxr-xr-x 2 steven member 80 Apr 24 12:53 /srv/www/john
drwxr-xr-x 2 john member 80 Apr 24 12:53 /srv/www/steven
root # |
Apache 設定:
以下為在 SuSE Linux 下的設定,它的檔案是在 "/etc/apache2/vhosts.d/vhost.conf",如果你是使用
Redhat 系列的話,直接編輯 "/etc/httpd/conf/httpd.conf" 這個檔案裡的 VirtualHost
部份就可以了。
root # vi /etc/apache2/vhosts.d/vhost.conf
---------------------------------------
#Virtual Host 的 IP
NameVirtualHost 192.168.1.105
<VirtualHost 192.168.1.105>
#設定 DocumentRoot
DocumentRoot /srv/www/steven
#設定所對應的 FQDN
ServerName steven.l-penguin.idv.tw
#設定目錄權限
<Directory "/srv/www/steven">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost 192.168.1.105>
DocumentRoot /srv/www/john
ServerName john.l-penguin.idv.tw
<Directory "/srv/www/john">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
---------------------------------------
|
設定好之後,重新啟動 Apache
root # /etc/init.d/apache2 restart
Syntax OK
Shutting down httpd2 (waiting for all children to terminate) done
Starting httpd2 (prefork) done
root # |
實際驗收:
現在只要做一個很簡單的動作就是開啟你的 Browser 然後輸入網址就可以了!
http://steven.l-penguin.idv.tw/

http://john.l-penguin.idv.tw/

04/24/2006
|