以下内容是依实际的使用经验整理, 有关「虚拟主机」因为关联到各个不同的程式(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.
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.
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.
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 应该没什麽问题吧?