在 Linux 上建立虚拟主机最快速的方法 *

本篇的目的,是说明如何使用最简单的方式在你的网页服务器 (Apache) 上新增一个虚拟主机 (Virtual Host),让你只要建一个目录,或新增一个本机用户,就可以建立虚拟主机,并且可自动分割 Log 档 (以下之设定牵涉到 Apache 及 DNS 的观念,最好也有自行架设 DNS 服务)。

修改 Apache 设定

这部份需修改 Apache 的设定档,使它以 VirtualDocumentRoot 及 VirtualScriptAlias 建立虚拟主机,并设定 Log 档的输出格式。执行步骤:

  1. 备份 Apache 的设定档:
    cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.old
  2. 编辑 /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
  3. 如果你有使用 Awstats,请搜寻:
    CustomLog logs/access_log combined

    改成:

    CustomLog logs/vhost.log vcombined

    如果你没有使用 Awstats,请搜寻:

    CustomLog logs/access_log common

    改成:

    CustomLog logs/vhost.log vcommon
  4. 搜寻下列这一行,将它删除或设成注解:
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
  5. 搜寻下列这些设定,将它删除或设成注解:
    <Directory "/var/www/cgi-bin">
      AllowOverride None
      Options None
      Order allow,deny
      Allow from all
    </Directory>
  6. 如果当初已经有设定虚拟主机,请搜寻下面这一行,将它删除或设成注解:
    NameVirtualHost *

    然后取消所有虚拟主机的设定 (同样将它删除或设成注解):

    <VirtualHost *>
      .
      .
      .
    </VirtualHost>
  7. 储存修改。
  8. 重新启动 Apache 服务器:
    service httpd restart

分割虚拟主机的 Log 档

这部份需下载本人写的 Log 档分割程式,本程式会将 vhost.log 依照 VirtualHost 的网址及月份,分割储存成多个 log 档。安装步骤:

  1. 从本站下载 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 参数。

  2. 如果你有使用 Awstats,请修改 Awstats 下虚拟主机的设定档 (假设你的虚拟主机的名称为 "host.example.com"),将 LogFile 的参数改成:
    /var/log/httpd/host.example.com.%YYYY-1%MM-1.log

    其中的 "host.example.com" 是指你的虚拟主机的名称,请依你的实际状况输入。

  3. 请于 "/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
  4. 更改档案属性为 755:
    chmod 755 /etc/cron.hourly/split-vhost.sh

关于 DNS 设定

修改 DNS 的目的,就是要让 *.example.com 都可以自动指向目前的主机,避免每次新增虚拟主机时,都要再修改及重新启动 DNS。设定步骤:

  1. 编辑现有网域的 DNS 记录档 (此记录档通常位于 /var/named/),假设主机的 IP 为 "192.168.1.10",则在记录档的最后一行加上:
    *  IN  A  192.168.1.10

    其中的 "192.168.1.10" 是指你的主机的 IP 位址,请依你的实际状况输入。

  2. 重新启动 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

参考网址

  1. No comments yet.

  1. No trackbacks yet.

return top

%d 位部落客按了赞: