Linux|系统管理|WEB开发

关注Linux,系统管理,WEB开发以及开源世界

Apache配置动态虚拟主机

| Comments

很惭愧,知道今天才知道Aapche可以基于域名或者IP来动态配置虚拟主机。

这样,你只要在特定的目录建立域名目录,那么你的虚拟主机就配置好了,而必须许该httpd.conf文件,更重要的是,不要重启Apache服务。 否则的话,在有大量域名的情况下,修改配置的方式管理这些域名是一个噩梦。

不知道我的意思说明白了没有,那就举我的配置例子简单说明一下:

首先让apache加载vhost_alias模块
编辑/etc/httpd/conf/httpd.conf,确保有下面这样一行:
LoadModule vhost_alias_module modules/mod_vhost_alias.so

然后在/etc/httpd/conf.d/目录下创建vhost.conf文件,内容如下:

# get the server name from host: header info 
UseCanonicalName off
#use different log file accord to different virtual host LogFormat "%V
%h %l %u %t "%r" %s %b" vcommon CustomLog logs/vhost_log vcommon
#include the servername 
VirtualDocumentRoot /web/websites/%0/
VirtualScriptAlias /web/websites/%0/cgi-bin 

假设你有两个站点www.foo.com和www.bar.com,那么你只需要在/web/websites/创建对应的www.foo.com和www.bar.com目录,然后尝试访问这两个域名试试(当然前提是DNS指向其服务器)

上述的核心应该是依赖日志文件的格式,因此了解日志格式变量的意义对于我们举一反三很有好处,贴出如下:

%a: 远程IP地址
%A: 本地IP地址
%B: 已发送的字节数,不包含HTTP头
%b: CLF格式的已发送字节数量,不包含HTTP头。例如当没有发送数据时,写入‘-’而不是0。
%{FOOBAR}e: 环境变量FOOBAR的内容
%f: 文件名字
%h: 远程主机
%H: 请求的协议
%{Foobar}i: Foobar的内容,发送给服务器的请求的标头行。
%l: 远程登录名字(来自identd,如提供的话)
%m: 请求的方法
%{Foobar}n: 来自另外一个模块的注解“Foobar”的内容
%{Foobar}o: Foobar的内容,应答的标头行
%p: 服务器响应请求时使用的端口
%P: 响应请求的子进程ID。
%q: 查询字符串(如果存在查询字符串,则包含“?”后面的部分;否则,它是一个空字符串。) %r: 请求的第一行
%s: 状态。对于进行内部重定向的请求,这是指原来请求的状态。如果用%>s,则是指后来的请求。
%t: 以公共日志时间格式表示的时间(或称为标准英文格式)
%{format}t: 以指定格式format表示的时间
%T: 为响应请求而耗费的时间,以秒计
%u: 远程用户(来自auth;如果返回状态(%s)是401则可能是伪造的)
%U: 用户所请求的URL路径
%v: 响应请求的服务器的ServerName
%V: 依照UseCanonicalName设置得到的服务器名字

这个指南已经包含在Apache发布包里,如果手头没有文档,可以看看这个官方的 http://httpd.apache.org/docs/2.0/vhosts/mass.html 里面分别提到了2.0版本和1.3分别如何实现。

如果你对洋文不感兴趣,我找到一个中文的,移步这里看看

Update: 2008.9.12

原谅我的肤浅,日志文件格式并不是动态虚拟主机配置的依赖,下面这篇文档才是其正解。当然Aapche发布包里也有这篇文档。

Comments