實作 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

首頁