网站地图    收藏   

主页 > 系统 > apache教程 >

大容量虚拟主机的动态配置|虚拟主机-Apache教程

来源:自学PHP网    时间:2014-10-14 00:06 作者: 阅读:

[导读] ...

如果你的配置文件 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 

# 在返回请求的文件名的路径中包含进服务器名字: server name  "大容量虚拟主机的动态配置"由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Server/Apache/17999.html

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论