本文将通过实例介绍如何借助常见的Apache类HTTP服务器进行动态虚拟主机配置。
所谓虚拟主机(Virtual Host)是指在一台物理服务器上提供多个网站的web服务(本文介绍的网站是具有独立域名可以在Internet上访问的站点),所谓动态这里指不需改变HTTP服务程序的配置(如httpd.conf文件)、不需中断(重起)web服务就可以添加新站点修改服务中的站点。使用本文介绍的方法一台物理服务器(唯一IP)理论上可以提供无数个虚拟主机(当然受资源限制)
本文介绍的方法适用于所有Apache类服务器,包括各种平台上的Apache Server, IBM HTTPServer, Tomcat等,因此对各种系统具有广泛适用性,笔者已经在Windows、各种Linux、AIX等平台上进行了验证。同时目前微软的Win2k server版IIS5.0还不能实现上述动态虚拟主机服务,虽然可以设置主机头在同一IP上提供域内的虚拟主机(可以通过http://host/ 这样的地址访问)但不能在同一IP上提供形如http://host.domain的虚拟主机(不能通过Internet访问)。本文基于以下环境为例:
硬件:IBM RS/6000 Mod 44P270,双路PowerPC处理器,1G RAM,1G以太网
OS:IBM AIX 4.3.3 patch 11
Web server:IBM HTTPServer 1.3.12.4 (对应Apache版本1.3.6)
FTP server:AIX Toolbox for Linux Applications ProFTPD 1.2.4-1
网络环境:domain name: school.edu.cn 网络地址:12.34.56.0
服务器网络配置:IP: 12.34.56.78 Port: 80 域名:动态配置
此处再次强调本方法适用于各种软硬件平台,读者可以自行调整细节。
以下是具体实施步骤和相关解释:
1. 生成一个非root的管理员用户useradm(缺省属于staff组),具有telnet和su权限就可以,生成web用户组。
mkdir /hosts (这里保存各站点的域名,数据保存于各用户的目录下)
2. 配置ProFTPD,注意
Umask 022
DefaultRoot ~ web,!staff (web组中非staff组用户将被限制在自己的 ~ )
RequireValidShell no (web组用户没有telnet权限)
(其它平台可以选择各种FTP服务器,但请关闭匿名服务,并设置chroot以限制用户只能访问自己的目录)。
3. 配置缺省用户属性模版/usr/lib/security/mkuser.default 注意:
pgrp = web
groups = web
login = false
rlogin = false
密码规则规定如下:
maxrepeats = 3
minalpha = 3
minother = 3
4. 配置httpd.conf
这里要插入做一点说明:IBM HTTPServer(以下称IHS)是IBM提供的一个免费(但不是开源,因美国的加密出口限制)软件可以到IBM网站去下载,它基本上就是Apache,IBM从很早就加入Apache社团并作出重要贡献。我们下载得到的是在各平台上已编译的可执行版本,目前支持Windows, Linux, Sorlars, AIX, HPUX等各种平台。IHS的版本号与Apache.org的不同,但各版本均有对应。据笔者研究IHS与Apache的主要区别有以下几点:
l IHS内置IBM的SSL模块,Apache使用OpenSSL的模块。
l IHS全面支持IBM的软件产品如应用服务器Websphere, 并作了很好的整合。
l IHS提供web界面的服务器管理程序。
l 内置IBM的高速缓存服务模块AFPA.(后文详述如何调用该模块)
为实现动态配置虚拟主机,需要细分以下情况来编辑httpd.conf:
ü 所用Apache版本为1.3.6(对应HIS 1.3.12.4)(含)以下不提供mod_vhost_alias 模块,应使用mod_rewrite模块,配置举例如下:
#调入模块
LoadModule rewrite_module libexec/mod_rewrite.so
#由http申请的主机头获得域名
UseCanonicalName Off
#定义对应虚拟主机的log记录
LogFormat "%{Host}i %h %l %u %t "%r" %s %b" vcommon
CustomLog logs/access_log vcommon
#规定目录的服务属性
Options Indexes FollowSymLinks ExecCGI
AllowOverride All
#下面定义改写地址规则,将客户端申请的地址http://*.school.edu.cn指向本地文件系统的/hosts/*/html, 将客户CGI地址http://*.school.edu.cn/cgi-bin指向本地文件系统的/hosts/*/cgi-bin(其中*是日后动态配置的域名)
RewriteEngine On
RewriteMap lowercase int:tolower
RewriteCond %{REQUEST_URI} !^/icons/
RewriteCond %{REQUEST_URI} !^/cgi-bin/
RewriteRule ^/(.*)$ / hosts/${lowercase:%{SERVER_NAME}}/html/$1
RewriteCond %{REQUEST_URI} ^/cgi-bin/
RewriteRule ^/(.*)$ / hosts/${lowercase:%{SERVER_NAME}}/$1 [T=application/x-httpd-cgi]
ü 当我们使用的Apache版本高于1.3.6,则使用mod_vhost_alias 模块来实现同样的功能:
#调入模块
LoadModule vhost_alias_module modules/mod_vhost_alias.so
#同上
UseCanonicalName Off
LogFormat "%{Host}i %h %l %u %t "%r" %s %b" vcommon
CustomLog logs/access_log vcommon
#定义动态虚拟主机
VirtualDocumentRoot /www/hosts/%0/docs
VirtualScriptAlias /www/hosts/%0/cgi-bin
上述%0对应用户申请的域名部分
5. *配置IBM高速缓存服务
IBM对Apache社团的一个重要贡献就是Fast Response Cache Accelerator(FRCA), 也就是用系统物理内存对web数据进行缓冲,这样可以大大提高我们这样的高负荷系统的性能。
l 安装http_server.frca文件组
l 用no 命令设置以下参数:
nbc_limit (单位kb,一般取no显示的参数thewall数值的一半,缓存总量)
nbc_max_catch (单位b,缓存对象的最大文件尺寸,缺省128kb)
nbc_min_catch (单位b,缓存对象的最小文件尺寸,缺省1b)
l 用命令frcactrl load 启动服务(应在HIS之前启动)
l 配置httpd.conf:
1) LoadModule ibm_afpa_module_module libexec/mod_ibm_afpa.so
AddModule mod_ibm_afpa.c
#上述模块应最先调入
2) 在 字段中开启缓存:
AfpaCache on
3) 在文件尾加入一行
AfpaEnable
4) *设置缓存log:
AfpaLogFile path/filesname V-CLF
5) 启动IHS,
6) 验证FRCA的服务状态
frcactrl stat
6. 站点建立举例
这里假设服务运行中,要增加一个站点sras.school.edu.cn
l 在DNS中注册新域名
sars IN A 12.34.56.78 (所有虚拟主机都使用这个IP)
l 用useradm登录AIX,
su – (获得root权限)
mkuser teacher (用户名可以由sars站点管理员指定)
edquota –u –p olduser teacher (给新用户设置与老用户olduser相同的空间限制)
passwd teacher (设置密码)
l 以teacher用户权限建立以下目录
/home/teacher/html 和 /home/teacher/cgi-bin
l 以root身份执行以下操作
cd /hosts
mkdir sars (这个目录使得域内用户可以省略域名访问http://sara/)
ln –s sars sars.school.edu.cn
cd sars
ln –s /home/teacher/html html(对应http://sara.school.edu.cn/)
ln –s /home/teacher/cgi-bin cgi-bin (对应http://sara.school.edu.cn/cgi-bin/)
l 至此站点建立完成,可以通过浏览器访问新的站点。teacher用户可以通过ftp://sara.school.edu.cn来管理自己的站点,对于那些不熟悉FTP的老师在IE中启用FTP的文件夹视图可以使他们像管理本地文件一样管理网站。而即使老师不去写网页Apache的autoindex模块也可以将资源以目录的形式直接呈现给访问者,事实上像Apache.org这样的网站也大量运用目录方式向访问者提供资源。
这样我们就比较好地解决了每人拥有、管理自己网站的问题,一些没做过网站的老师也能自如地发布信息,学校信息化进程也借着这个契机向前迈进了一大步。希望这篇文章能够帮助更多的管理员,使更多有条件的用户早日拥有自己的网站。
参考文献:
1. IBM REDBOOK: IBM HTTP Server Powered by Apache on RS/6000,by Heinz Johner, Jouni Auer, Vitolis Bendinskas, Ng Chang Chyn, Shane Owenby, SunJong Park
2. AIX Version 4.3 Base Documentation CD
3. Apache HTTP Server Version 1.3 &2.0 Manual by the Apache HTTP Server Documentation Project.
4. ProFTPD Documentation
5. IBM Support website hints & tips Reference #: 1006402 by IBM Software Group 2002.12.16