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

发表于:2007-05-25来源:作者:点击数: 标签:
方法一:[color=red:d86f47f91f]简单的动态虚拟主机[/color:d86f47f91f] [code:1:d86f47f91f]这是httpd.conf文件中,完成虚拟主机的配置方法,这里采用了mod_vhost_alias。 #从Host头中取得 服务器 名字ServerName UseCanonicalNameOff #这里的日志格式,可以

方法一:[color=red:d86f47f91f]简单的动态虚拟主机[/color:d86f47f91f]
[code:1:d86f47f91f]这是 httpd.conf 文件中,完成虚拟主机的配置方法,这里采用了 mod_vhost_alias 。

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

# 这里的日志格式,可以在将来通过第一个参数域来分隔不同的虚拟主机的日志
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/aclearcase/" target="_blank" >ccess_log vcommon

# 在返回请求的文件名的路径中包含进服务器名字: server name
VirtualDocumentRoot /虚拟主机空间根目录/%0/htdocs
VirtualScriptAlias /虚拟主机空间根目录/%0/cgi-bin
#需要首先建立 /%0/htdocs ,然后把文件放在htdocs才可以访问
#%0表示虚拟主机的Server Name的这个名字,例如www.net.cn

将 UseCanonicalName Off 的配置改为 UseCanonicalName DNS 即可实现基于 IP 地址的虚拟主机。而在文件路径中所要插入的服务器名字(server name) 则通过虚拟主机的 IP 地址解析而得。[/code:1:d86f47f91f]


方法二:[color=red:d86f47f91f]多个的动态虚拟主机[/color:d86f47f91f]
[code:1:d86f47f91f]UseCanonicalName Off

LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon

<Directory /www/commercial>

Options FollowSymLinks
AllowOverride All

</Directory>

<Directory /www/homepages>

Options FollowSymLinks
AllowOverride None

</Directory>

<VirtualHost 111.22.33.44>

ServerName www.commercial.isp.com

CustomLog logs/access_log.commercial vcommon

VirtualDocumentRoot /www/commercial/%0/docs
VirtualScriptAlias /www/commercial/%0/cgi-bin

</VirtualHost>

<VirtualHost 111.22.33.45>

ServerName www.homepages.isp.com

CustomLog logs/access_log.homepages vcommon

VirtualDocumentRoot /虚拟主机空间根目录/%0/htdocs
VirtualScriptAlias /虚拟主机空间根目录/%0/cgi-bin

</VirtualHost> [/code:1:d86f47f91f]


方法三:[color=red:d86f47f91f]基于 IP 地址的虚拟主机[/color:d86f47f91f]
[code:1:d86f47f91f]
# 从 IP 地址反解析得到服务器名字(server name)
UseCanonicalName DNS

# 在日志中包含 IP 地址,便于后续分发
LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon

# 在文件路径中包含 IP 地址 %0表示IP
VirtualDocumentRootIP /www/hosts/%0/docs
VirtualScriptAliasIP /www/hosts/%0/cgi-bin
[/code:1:d86f47f91f]

方法四:[color=red:d86f47f91f]使用 mod_rewrite 的虚拟主机系统[/color:d86f47f91f]
[code:1:d86f47f91f]
RewriteEngine on

RewriteMap lowercase int:tolower

# 检查 hostname 正确与否,之后才能使 RewriteRule 起作用
RewriteCond ${lowercase:%{SERVER_NAME}} ^www\.[a-z-]+\.isp\.com$

# 将虚拟主机名字廉洁到 URI 的开头
# [C] 表明本次重写的结果将在下一个 rewrite 规则中使用
RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C]

# 现在创建实际的文件名
RewriteRule ^www\.([a-z-]+)\.isp\.com/(.*) /home/$1/$2
[/code:1:d86f47f91f]


[color=blue:d86f47f91f][size=24:d86f47f91f]重头戏[/size:d86f47f91f][/color:d86f47f91f]
方法五:[color=red:d86f47f91f]使用独立的虚拟主机配置文件[/color:d86f47f91f]
          [color=red:d86f47f91f]当你修改vhost.map的时候,不需要重新启动Apache[/color:d86f47f91f]
[code:1:d86f47f91f]
这样的布局利用了 mod_rewrite 的高级特性, 在独立的虚拟主机配置文件中转换。如此可以更为灵活,但需要较为复杂的设置。

vhost.map 文件包含了类似下面的内容:

www.customer-1.com    /www/customers/1
www.customer-2.com    /www/customers/2
#......
www.customer-N.com   /www/customers/N


http.conf 包含了:

RewriteEngine on

RewriteMap lowercase int:tolower

# 定义映像文件
RewriteMap vhost txt:/VHOST.map的路径/vhost.map

# 和上面的例子一样,处理变名
RewriteCond %{REQUEST_URI} !^/icons/
RewriteCond %{REQUEST_URI} !^/cgi-bin/
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
# 这里做基于文件的重新映射
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/docs/$1

RewriteCond %{REQUEST_URI} ^/cgi-bin/
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/cgi-bin/$1
[/code:1:d86f47f91f]


[quote:d86f47f91f]
    以上内容来自Apache2的"动态配置大型虚拟主机",在这里列出来,是为了方便某些不想看文档的人参考一下子。
   如果你去http://w.yi.org,使用关键字 虚拟主机 搜索一下子,相信会有更多的资料!!!
[/quote:d86f47f91f]

 haohaoo 回复于:2004-04-03 11:23:22
谢谢,最后一种方法还没有看到哦

 haohaoo 回复于:2004-04-03 11:31:19
http://www.1842.net/apache/vhosts/mass.html

我实在太懒了,原来自己有啊

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