以下內容是依實際的使用經驗整理, 有關「虛擬主機」因為關聯到各個不同的程式(httpd、named、sendmail), 所以似乎沒有「單一完整」資料, 在參照各別文件後, try try 出來用, 以下各項可能不甚完善, 但確定可以工作無誤,若有不正確、不妥的地方還請大家指正.
由於市場競爭以及不是每個人都能方便的24小時連接 Internet, 目前幾乎
各個 ISP 都「出賣虛擬主機」, 且「售價不低」, 這個看似「略有」難度的工作若用一台 Intel_Based_PC 來做的話, (除專線費用外)其實是很低成本,或許幾個人合租一條中、低速度的專線(看實際需要吧!), 再用 Linux 來當工作平台, 就可以省下一筆不小的開銷了!底下以一台 跑 Linux 的 PC + Apache + sendmail + bind來說明。
* * * * * *
所謂「虛擬主機」主要是指「虛擬 Web Server」, 但光是這個還不算完整,於是還要有個「虛擬 Mail Server」來搭配, 而這兩者同時必需仰賴「真實DNS server」才能構成整套的「虛擬」動作.
當然, 各個 domain name 要正式在 twnic 或 internic 或 alternic 或其它國家的主管單位註冊過才能生效.
還有, 以下設定算是重點摘要, 最好事先對基本的 Apache、named、sendmail有一些了解, 才能避開執行的可能的問題.
* * * * * *
■■■
Apache 大概是目前用來當「虛擬 Web 主機」的最熱門 daemon, 說明如下:
設定好它可以接受哪些 domain name 的呼叫, 一遇到 browser 端向它要求某個 domain name 時, 它就會去抓相對的 directory 下的檔案丟給 browser
假設除了「真實公司」外, 另有 aaa、bbb、ccc 三家公司及團體共用這台
真實 Web server, 那麽分別建立
/home/aaa
/home/bbb
/home/ccc
當然三個目錄下, 它們各有各的 index.html
/home/aaa/index.html
/home/bbb/index.html
/home/ccc/index.html
在 Apache 的 httpd.conf 尾段里設定如下:
ServerAdmin john@aaa.com.tw
DocumentRoot /home/aaa
ServerName www.aaa.com.tw
ErrorLog logs/aaa-error_log
TransferLog logs/aaa-access_log
ServerAdmin peter@bbb.com.tw
DocumentRoot /home/bbb
ServerName www.bbb.com.tw
ErrorLog logs/bbb-error_log
TransferLog logs/bbb-access_log
ServerAdmin victor@ccc.org.tw
DocumentRoot /home/ccc
ServerName www.ccc.org.tw
ErrorLog logs/ccc-error_log
TransferLog logs/ccc-access_log
■■■
在 named(以8.1.1以後版本為例) 這邊:
在原有 named.conf 里加入:
zone "aaa.com.tw" in { type master; file "file1.aaa"; };
zone "bbb.com.tw" in { type master; file "file1.bbb"; };
zone "ccc.org.tw" in { type master; file "file1.ccc"; };
在 /etc/named/file1.aaa 則是:
@ IN SOA .....這些跟「原主機」內容一樣.....
IN NS my_net_domain.com.tw. <--這是真實跑 bind 這台
www IN A 172.16.1.1
IN MX 0 aaa.com.tw.
aaa.com.tw. IN A 172.16.1.1
IN MX 0 aaa.com.tw.
在 /etc/named/file1.bbb 則是:
@ IN SOA .....這些跟「原主機」內容一樣.....
IN NS my_net_domain.com.tw. <--這是真實跑 bind 這台
www IN A 172.16.1.1
IN MX 0 bbb.com.tw.
bbb.com.tw. IN A 172.16.1.1
IN MX 0 bbb.com.tw.
在 /etc/named/file1.ccc 則是:
@ IN SOA .....這些跟「原主機」內容一樣.....
IN NS my_net_domain.com.tw. <--這是真實跑 bind 這台
www IN A 172.16.1.1
IN MX 0 ccc.org.tw.
ccc.org.tw. IN A 172.16.1.1
IN MX 0 ccc.org.tw.
■■■
在 sendmail 這邊:
到 /etc/sendmail.cf 里加上各個 domain name 到 Cwlocalhost 後面, 用空白隔開各個名字:
Cwlocalhost aaa.com.tw bbb.com.tw ccc.org.tw
這就可以單一台 mail server 分別收各人的信
john@aaa.com.tw
peter@bbb.com.tw
victor@ccc.org.tw
不過先前有人提到若是同一個名字怎麽辦?
clinton@aaa.com.tw
clinton@bbb.com.tw
clinton@ccc.org.tw
目前我只能以「不開同一個ID」來避開這個問題.
■■■
另外, 假如 Web Server 跟 Mail Server 是分別獨立的兩台, 為便例一般
user 的操作, 可以把 Web Server 的 /home/aaa 這個目錄 export 出來給Mail server 掛到 john 這個 user 的某個目錄下, 例如/home/john/www
這樣當 john 把檔案(HTML、影像...) 丟到 Mail server 時, 事實上是丟
到 Web server 里的 aaa 公司之下, 由於要把別台的目錄 mount 進來是只有 root 才能做, 所以這樣 export/mount 應該沒什麽問題吧?