在 Linux 上建立虚拟主机最快速的方法 *
本篇的目的,是说明如何使用最简单的方式在你的网页服务器 (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 <Directory /home/*/public_html> Options FollowSymLinks AllowOverride All </Directory>
搜寻:
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/"
- 搜寻下列这些设定,将它删除或设成注解:
<Directory "/var/www/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory>
- 如果当初已经有设定虚拟主机,请搜寻下面这一行,将它删除或设成注解:
NameVirtualHost *
然后取消所有虚拟主机的设定 (同样将它删除或设成注解):
<VirtualHost *> . . . </VirtualHost>
- 储存修改。
- 重新启动 Apache 服务器:
service httpd restart
分割虚拟主机的 Log 档
这部份需下载本人写的 Log 档分割程式,本程式会将 vhost.log 依照 VirtualHost 的网址及月份,分割储存成多个 log 档。安装步骤:
- 从本站下载 split-vhost.pl 至 /usr/bin/
cd /usr/bin wget http://here.vixual.net/files/source/log/split-vhost_pl mv split-vhost_pl split-vhost.pl chmod 755 split-vhost.pl
如有必要,请自行修改 split-vhost.pl 内的 $LogFile, $TempFile, $TargetDir 参数。
- 如果你有使用 Awstats,请修改 Awstats 下虚拟主机的设定档 (假设你的虚拟主机的名称为 "host.example.com"),将 LogFile 的参数改成:
/var/log/httpd/host.example.com.%YYYY-1%MM-1.log
其中的 "host.example.com" 是指你的虚拟主机的名称,请依你的实际状况输入。
- 请于 "/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 的目的,就是要让 *.example.com 都可以自动指向目前的主机,避免每次新增虚拟主机时,都要再修改及重新启动 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.example.com"):
- 方式一,以新增用户的方式新增虚拟主机,用户的名称就是虚拟主机的名称 (建议使用):
useradd virtual.example.com su virtual.example.com mkdir /home/virtual.example.com/public_html mkdir /home/virtual.example.com/public_html/cgi-bin exit chmod 711 /home/virtual.example.com passwd virtual.example.com
输入密码后即完成。
- 方式二,以建立子目录的方式新增虚拟主机,子目录的名称就是虚拟主机的名称:
mkdir /home/virtual.example.com mkdir /home/virtual.example.com/public_html mkdir /home/virtual.example.com/public_html/cgi-bin chmod 711 /home/virtual.example.com
使用以上两种方式建立之 /home/virtual.example.com/public_html 目录是用来放网页的,而目录下的 "cgi-bin" 则是用来放置 CGI 程式。建立好虚拟服务器之后,并不需要重新启动 Apache 或 DNS 喔!
重建原来的网页服务器
最后,由于使用以上的方式设定 Apache 之后,原来的网页服务器便没有作用了 (不知你发现了没?),所以,我们必须以符号连结的方式来重建原来的服务器(假设原来的网址及 IP 分别为 "host.example.com" 及 "192.168.1.10"):
mkdir /home/host.example.com ln -s /var/www/html /home/host.example.com/public_html ln -s /var/www/cgi-bin /home/host.example.com/public_html/cgi-bin ln -s /home/host.example.com /home/192.168.1.10
No comments yet.