2007-05-17

大容量虚拟主机的动态配置

来源: 本站收集整理 作者:佚名 评论 0 条
 

假如你的配置文件 httpd.conf 中包含类似下面的许多 <VirtualHost> 部分,并且其中的内容都大致相同的话, 你应该会对这里所要讲的技术比较感爱好。

NameVirtualHost 111.22.33.44
<VirtualHost 111.22.33.44>

ServerName www.customer-1.com
DocumentRoot /www/hosts/www.customer-1.com/docs
ScriptAlias /cgi-bin/ /www/hosts/www.customer-1.com/cgi-bin

</VirtualHost>
<VirtualHost 111.22.33.44>

ServerName www.customer-2.com
DocumentRoot /www/hosts/www.customer-2.com/docs
ScriptAlias /cgi-bin/ /www/hosts/www.customer-2.com/cgi-bin

</VirtualHost>
# blah blah blah
<VirtualHost 111.22.33.44>

ServerName www.customer-N.com
DocumentRoot /www/hosts/www.customer-N.com/docs
ScriptAlias /cgi-bin/ /www/hosts/www.customer-N.com/cgi-bin

</VirtualHost>

最基本的思想是用动态的机制来实现所有这些静态的 <VirtualHost> 配置。这样做有许多优点:

配置文件变小,使得 Apache 可以更快的启动,同时消耗更少的内存。
添加一个虚拟主机,应该只是简单的在文件系统中创建合适的目录, 以及配置相关的 DNS 信息,并且无需重新启动 Apache。
主要的缺点是你无法针对每个虚拟主机用户使用不同的日志文件。 然而,假如真的在配置有大量虚拟主机的服务器上记录不同的日志文件的话,很有可能会达到操作系统所答应的最大文件描述符(file descriptors)的数量。更好的办法是把日志写到管道(pipe)或者先入先出(fifo)的堆栈,并启用其他的进程来分发所得到的日志信息给用户(同时也可以做一些历史纪录的统计等等)。

概要

一个虚拟主机有两部分来定义:一个是它的 IP 地址, 还有一个是 HTTP 请求中 Host: 头的内容。动态大容量虚拟主机的技术, 是基于自动在所要返回的文件的路径中插入相关信息的想法而实现的。 使用mod_vhost_alias 可以很轻易的实现, 但假如你的 Apache 版本低于 1.3.6 ,则你必须使用 mod_rewrite。 两者在默认情况下都不启用;要使用他们,必须在配置和编译 Apache 的阶段声明启用(enable)。

我们需要做很多伪装,才能使动态虚拟主机看起来像普通情况。 最重要的一点是 Apache 使用虚拟主机名字(Server Name)来生成自我参考(self-referential) 的 URLs 等等信息。这是用 ServerName 指令来配置的,并且可以通过环境变量 SERVER_NAME 传递给 CGI 脚本。 在运行时所实际使用的值是由指令 UseCanonicalName 的设置情况来控制的。当 UseCanonicalName Off 时, 虚拟主机名字(server name)取自请求中的 Host: 头的内容。 当 UseCanonicalName DNS 时,则通过 DNS 反解析虚拟主机的IP 地址得到主机名字。以前的做法是用基于名称的动态虚拟主机,近来常用基于 IP 地址的虚拟主机设置。 假如 Apache 无法决策虚拟主机名字,则可能是没有 Host: 头信息或者 DNS 解析失败, 碰到这样的情况,Apache 使用配置 ServerName 时所填写的主机名字。

简单的动态虚拟主机

这是 httpd.conf 文件中,完成和上文 动机 部分所提到的虚拟主机一样效果的配置方法,但这里采用了 mod_vhost_alias 。

# 从 Host: 头中取得服务器名字 Server Name
UseCanonicalName Off

# 这里的日志格式,可以在将来通过第一个参数域来分隔不同的虚拟主机的日志
LogFormat "%V %h %l %u %t "%r" %s %b" vcommon
CustomLog logs/access_log vcommon
共2页: 上一页 1 [2] 下一页

(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:优化Apache服务器的重负荷  
下一篇:用Linux搭建全自动虚拟主机
    评论加载中…
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号