动态虚拟主机配置方法

发表于:2007-07-04来源:作者:点击数: 标签:
在这里得到很多的帮助,因此希望帮到别人,能力有限,高手见笑了 动态虚拟主机配置 动态配置海量虚拟主机驻留,用于巨量数目的WEB站点。随apache提供的标准模块+mod_vhost_aliases实现动态配置的主机。作用是在检查完进来的URL后为这些目录生成实际路径。 实

在这里得到很多的帮助,因此希望帮到别人,能力有限,高手见笑了
动态虚拟主机配置

动态配置海量虚拟主机驻留,用于巨量数目的WEB站点。随apache提供的标准模块+mod_vhost_aliases实现动态配置的主机。作用是在检查完进来的URL后为这些目录生成实际路径。
实现基于名字的动态虚拟主机指令:

 VirtualDocumentRoot
 指定模块如何从URL请求那里为动态虚拟主机构造DocumentRoot路径。
 VirtualScriptAlias
 和ScriptAlias一样,从URL请求那里构造一个包含CGI脚本的目录路径

%N
服务器的第N部分,如果服务器的全名是 vhost1.sohu.com,那么%1解析成vhost1,%2 解析成sohu,以此类推。

%N+
服务器名称的地N部分和其后所有其余部分。如果服务器全名为vhost1.sohu.com,那么%2+解析为sohu.com。

%-N
字符串倒数第N部分。如果服务器全名为vhost1.sohu.com,那么%-1解析成com。%-2解析成sohu

%p
动态虚拟主机的TCP端口号


还可以从服务器名字中抽取的每一部分可以使用分类符%N.M继续对子部分进一步划分,其中N是主部分,M是子部分。例如:
%1=vhost1
%2=sohu
%3=com

可以划分子部分:
%1.1=v
%1.2=h
%1.3=o
%2.1=s
%2.2=o


例如:
在httpd.conf文件中:
 UseCanonicalName off 
 VirtualDocumentRoot /home/httpd/%1/%p

要实现输入http://www.263.net:443
需要在/home/httpd目录中建立www(%1)/443
然后在/home/httpd/%1/443/目录中建立网页文件, 在DNS中设置解析
访问即可。



例2:

将例子一中的VirtualDocumentRoot定义的内容删除。
然后再添加:
 VirtualHostDocumentRoot /home/httpd/%1/%2


要求:
实现动态虚拟主机:
www.abc.com
www.xyz.com

#mkdir /home/httpd/www
#mkdir /home/httpd/www/abc
#mkdir /home/httpd/www/xyz
将网页文件放入/home/httpd/www/abc和/home/httpd/www/xyz即可
在DNS中设置解析 :oops:

 好好先生 回复于:2003-11-21 10:36:58
是自己写的吧?成功了吧?

 yunlei 回复于:2003-11-21 11:22:51
[quote:ee39aaad9c="好好先生"]是自己写的吧?成功了吧?[/quote:ee39aaad9c]
在理论上可以支持上千个虚拟主机,而且非常方便,简单,是我写的拉,欢迎讨论,下面写了个基于IP地址的动态虚拟主机,贴出来给大家

 yunlei 回复于:2003-11-21 11:23:57
基于IP的动态虚拟主机


需要的指令:
 
 VirtualDocumentRootIP
 
 和VirtualDocumentRoot相似,但它是从请求到达的IP地址那里构造动态虚拟主机DocumentRoot的路径地

 VirutalScriptAliasIP
 和VirtualScirptAlias相似,但它是从请求到达的IP地址那里,构造CGI脚本目录的路径。


/*由于mod_vhost_aliases在请求到达服务器时构造动态主机路径,所以DocumentRoot和ScriptAlias实际上是根据客户尝试请求的虚拟主机进行变化的变量,所以在httpd.conf当中,不必针对每个虚拟主机明确指定这两个指令。实际上不需要在httpd.conf中指定任何虚拟主机,网管唯一要做的是,确保在服务器上针对每个虚拟主机都存在一个目录,如果该目录不存在,客户端将收到一个not found的信息。*/
 
例子:
环境:本机IP:192。168。9。254
一、增加IP地址
方法:
#ifconfig 192.168.9.1
#ifconfig 192.168.9.2

// 重新启动后失效,若希望永远生效,请增加eth0:0和eth0:1.以192.168.9.1为例,%1=192,%2=168,%=9,%4=1

二、修改httpd.conf文件
UseCanonicalName DNS
VirtualDocumentRootIP /home/httpd/www/%4
VirtualScriptAliasIP /home/httpd/www/cgi-bin/%4
重新启动apache。
三、在相关位置建立以下目录
#mkdir /home/httpd/www
#mkdir /home/httpd/www/1
#mkdir /home/httpd/www/cgi-bin/1
//创建到192。168。9。1的虚拟主机网页根目录
#mkdir /home/httpd/www/2
#mkdir /home/httpd/www/cgi-bin/2
//创建到192.168.9.2的虚拟主机网页根目录。

三、在DNS中设置,将192.168.9.1解析成  www.163.com
                 将192.168.9.2解析成  www.263.net
四、可以访问拉。
/*由于IP地址的每个部分可以取1---254之间的数值,所以这个方法可以建立254个基于IP的虚拟主机。也可以做支持254*254 台的虚拟主机,但意义不大。*/
UseCanonicalName on 
         apahce使用 ServerName和Port生成自指URL,来构造服务器的规范名称。


UseCanonicalName off
        apache使用由客户提供的主机头指令的主机名称和端口号为服务器构造自指URL, off经常用于基于名称的动态虚拟主机

UseCanonicalName DNS
       用于基于IP的动态虚拟主机。apache使用DNS执行客户连接IP地址搜索时确定的主机名,构造服务器自指URL,可以用在服务器环境,但在基于名字的虚拟主机下不起作用地。

 yanyp 回复于:2003-11-23 21:22:44
多谢多谢,正找这个呢

 wienne 回复于:2003-11-27 15:18:55
试验过了,成功!

不过

原有的www.test.com,它也跑到指定的目录下去找文件了。

可我的文件却放到 htdocs/目录下。

有没有办法,让某几个名字不做这样的替换?

原文转自:http://www.ltesting.net