Apache模块 mod_vhost_alias
FreeBSD/Linux/Server November 16th, 2006 532 Views说明: 提供大容量虚拟主机的动态配置
状态: Extension
模块名: vhost_alias_module
源文件: mod_vhost_alias.c
概要
本模块通过将 HTTP 请求中的 IP 地址和/或 Host: 头内容转换为所要提供服务的文件的路径名称来创建动态的虚拟主机配置。这样的做法,使得应用大量的配置相近的虚拟主机变得更为容易。
Note
如果 mod_alias 或者 mod_userdir 被用来转换 URIs 为文件名,那么这两个将重载 mod_vhost_alias 的设定。例如,下面的配置将在任何情况下把 /cgi-bin/script.pl 映射为 /usr/local/apache2/cgi-bin/script.pl:
ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
VirtualScriptAlias /never/found/%0/cgi-bin/
目录名称的替换
本模块中的所有指令都将字符串替换为路径名。被替换的字符串(以后称为名称: name )或者是服务器名字(见 UseCanonicalName指令,以查阅具体如何决策)或者是“点数字”格式的虚拟主机的 IP 地址。替换操作使用了printf ,藉此提供各种转换格式:
%% 插入一个 %
%p 插入虚拟主机的端口号
%N.M 插入名称(或者名称的一部分)
N 和 M 被用来指定名称(name)的子字符串。N 为名称中用小数点分隔的某一个部分,而 M 为被选中的 N 中的字符串。M 是可选的,如果不写 M 的话默认为 0 ;小数点当且仅当 M 存在时必须书写。替换操作如下:
0 整个名称
1 第一部分
2 第二部分
-1 最后一个部分
-2 倒数第二个部分
2+ 第二个开始到最后的所有各个部分
-2+ 倒数第二个以及之前的所有各个部分
1+ and -1+ 等同于 0
如果 N 或者 M 大于存在的部分个数,则简单的用下划线来替换。
例子
对于一个简单的基于名称的虚拟主机配置来说,在你的配置文件中可能会用下面的指令:
UseCanonicalName Off
VirtualDocumentRoot /usr/local/apache/vhosts/%0
那么请求http://www.example.com/directory/file.html 的操作将会如期的返回文件/usr/local/apache/vhosts/www.example.com/directory/file.html。
对于拥有为数众多的虚拟主机的情况而言,减少 vhosts 目录大小的一个好办法就是重新组织。为此你可以使用下面的配置:
UseCanonicalName Off
VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2
那么来自 http://www.domain.example.com/directory/file.html 的请求将会如期的返回文件 /usr/local/apache/vhosts/example.com/d/o/m/domain/directory/file.html。
进一步的分割可以用名称末尾的字符来索引,例如:
VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.-1/%2.-2/%2.-3/%2
该例返回文件 /usr/local/apache/vhosts/example.com/n/i/a/domain/directory/file.html。
也可以这样使用:
VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2.4+
该例返回文件 /usr/local/apache/vhosts/example.com/d/o/m/ain/directory/file.html。
对于基于 IP 地址的虚拟主机,可以这样配置:
UseCanonicalName DNS
VirtualDocumentRootIP /usr/local/apache/vhosts/%1/%2/%3/%4/docs
VirtualScriptAliasIP /usr/local/apache/vhosts/%1/%2/%3/%4/cgi-bin
来自 http://www.domain.example.com/directory/file.html 的请求将会如期的返回文件 /usr/local/apache/vhosts/10/20/30/40/docs/directory/file.html ,这里假设 www.domain.example.com 的 IP 地址为 10.20.30.40 。 来自 http://www.domain.example.com/cgi-bin/script.pl 的请求将会执行程序 /usr/local/apache/vhosts/10/20/30/40/cgi-bin/script.pl 。
如果你希望在 VirtualDocumentRoot 指令中包含字符 . ,但这又和 % 指令会产生冲突,可以这样解决:
VirtualDocumentRoot /usr/local/apache/vhosts/%2.0.%3.0
来自 http://www.domain.example.com/directory/file.html 的请求将会如期的返回文件 /usr/local/apache/vhosts/domain.example/directory/file.html。
指令 LogFormat 的 %V 和 %A 在和本模块的关联中起了一定作用。
VirtualDocumentRoot 指令
说明: 对于给定的虚拟主机动态配置根文档目录
语法: VirtualDocumentRoot 包含替换操作格式符的目录名称|none
默认值: VirtualDocumentRoot none
上下文: 服务器配置, 虚拟主机
状态: Extension
模块: mod_vhost_alias
指令 VirtualDocumentRoot 使 Apache 通过虚拟主机的域名找到相应的文档。扩展 包含替换操作格式符的目录名称 所得到的目录将会作为虚拟主机的根目录,这和指令 DocumentRoot 的参数是一样的。 如果 包含替换操作格式符的目录名称 为 none ,那么 VirtualDocumentRoot 将被关闭。 该指令不能和 VirtualDocumentRootIP 指令在同一语境中使用。
VirtualDocumentRootIP 指令
说明: 对于给定的虚拟主机动态配置根文档目录
语法: VirtualDocumentRootIP 包含替换操作格式符的目录名称|none
默认值: VirtualDocumentRootIP none
上下文: 服务器配置, 虚拟主机
状态: Extension
模块: mod_vhost_alias
指令 VirtualDocumentRootIP 和指令VirtualDocumentRoot相似,只是替换操作时用的不是虚拟主机域名,而是 IP 地址。
VirtualScriptAlias 指令
说明: 对于给定的虚拟主机动态配置 CGI 目录
语法: VirtualScriptAlias 包含替换操作格式符的目录名称|none
默认值: VirtualScriptAlias none
上下文: 服务器配置, 虚拟主机
状态: Extension
模块: mod_vhost_alias
指令 VirtualScriptAlias 使 Apache 确定何处存放 CGI 脚本,这和指令 VirtualDocumentRoot 的做法是一样的。它匹配请求中的以 /cgi-bin/ 起始的 URIs ,更像指令 ScriptAlias/cgi-bin/ 所做的。
VirtualScriptAliasIP 指令
说明: 对于给定的虚拟主机动态配置 CGI 目录
语法: VirtualScriptAliasIP 包含替换操作格式符的目录名称|none
默认值: VirtualScriptAliasIP none
上下文: 服务器配置, 虚拟主机
状态: Extension
模块: mod_vhost_alias
指令 VirtualScriptAliasIP 和指令VirtualScriptAlias 相像,只是替换操作时用的不是虚拟主机域名,而是 IP 地址。

Recent Comments