<-
Apache > HTTP 服务器 > 文档 > 2.4 版 > 模块

Apache 模块 mod_vhost_alias

可用语言:  en  |  fr  |  tr 

描述提供动态配置的大规模虚拟主机功能
状态扩展
模块标识符vhost_alias_module
源文件mod_vhost_alias.c

摘要

此模块通过允许使用 HTTP 请求的 IP 地址和/或 Host: 标头作为路径的一部分来确定要提供哪些文件,从而创建动态配置的虚拟主机。这使得使用大量具有相似配置的虚拟主机变得容易。

注意

如果使用 mod_aliasmod_userdir 将 URI 转换为文件名,它们将覆盖下面描述的 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/"
Support Apache!

主题

指令

错误修复清单

另请参阅

top

目录名插值

此模块中的所有指令都将字符串插值到路径名中。插值的字符串(以下称为“名称”)可以是服务器名称(有关如何确定此名称的详细信息,请参见 UseCanonicalName 指令),也可以是服务器上虚拟主机的 IP 地址(以点分十进制格式表示)。插值由受 printf 启发的规范控制,这些规范具有多种格式

%% 插入一个 %
%p 插入虚拟主机的端口号
%N.M 插入(部分)名称

NM 用于指定名称的子字符串。N 从名称的点分隔组件中选择,而 MN 选择的任何内容中选择字符。M 是可选的,如果不存在则默认为零;只有当 M 存在时,点才必须存在。解释如下

0 整个名称
1 第一部分
2 第二部分
-1 最后一部分
-2 倒数第二部分
2+ 第二部分及所有后续部分
-2+ 倒数第二部分及所有前序部分
1+-1+ 0 相同

如果 NM 大于可用部分的数量,则会插值一个下划线。

top

示例

对于简单的基于名称的虚拟主机,您可以在服务器配置文件中使用以下指令

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

用户非常常见的请求是能够将多个域指向多个文档根目录,而无需担心请求的主机名的长度或部分数量。如果请求的主机名是 sub.www.domain.example.com 而不是简单的 www.domain.example.com,那么使用 %3+ 将导致文档根目录为 /usr/local/apache/vhosts/domain.example.com/... 而不是预期的 example.com 目录。在这种情况下,使用组合 %-2.0.%-1.0 可能会有益,它将始终生成域名和顶级域名,例如 example.com,而不管附加到主机名的子域名数量如何。因此,您可以创建一个配置,将所有一级、二级或三级子域名都指向同一个目录

VirtualDocumentRoot "/usr/local/apache/vhosts/%-2.0.%-1.0"

在上面的示例中,www.example.com 以及 www.sub.example.comexample.com 都将指向 /usr/local/apache/vhosts/example.com

对于基于 IP 的虚拟主机,您可以在配置文件中使用以下内容

UseCanonicalName DNS
VirtualDocumentRootIP "/usr/local/apache/vhosts/%1/%2/%3/%4/docs"
VirtualScriptAliasIP  "/usr/local/apache/vhosts/%1/%2/%3/%4/cgi-bin"

如果 www.domain.example.com 的 IP 地址为 10.20.30.40,则对 http://www.domain.example.com/directory/file.html 的请求将由文件 /usr/local/apache/vhosts/10/20/30/40/docs/directory/file.html 满足。对 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 与此模块一起使用非常有用。

top

VirtualDocumentRoot 指令

描述为给定的虚拟主机动态配置文档根目录的位置
语法VirtualDocumentRoot interpolated-directory|none
默认值VirtualDocumentRoot none
上下文服务器配置,虚拟主机
状态扩展
模块mod_vhost_alias

VirtualDocumentRoot 指令允许您根据服务器名称的值来确定 Apache HTTP Server 在哪里找到您的文档。扩展 interpolated-directory 的结果用作文档树的根目录,类似于 DocumentRoot 指令的参数。如果 interpolated-directorynone,则 VirtualDocumentRoot 将被关闭。此指令不能与 VirtualDocumentRootIP 在同一个上下文中使用。

注意

VirtualDocumentRoot 将覆盖您可能在相同上下文或子上下文中设置的任何 DocumentRoot 指令。在全局服务器范围内放置一个 VirtualDocumentRoot 将有效地覆盖以后定义的任何虚拟主机中的 DocumentRoot 指令,除非您在每个虚拟主机中将 VirtualDocumentRoot 设置为 None
top

VirtualDocumentRootIP 指令

描述为给定的虚拟主机动态配置文档根目录的位置
语法VirtualDocumentRootIP interpolated-directory|none
默认值VirtualDocumentRootIP none
上下文服务器配置,虚拟主机
状态扩展
模块mod_vhost_alias

VirtualDocumentRootIP 指令类似于 VirtualDocumentRoot 指令,只是它使用连接服务器端的 IP 地址进行目录插值,而不是服务器名称。

top

VirtualScriptAlias 指令

描述为给定的虚拟主机动态配置 CGI 目录的位置
语法VirtualScriptAlias interpolated-directory|none
默认值VirtualScriptAlias none
上下文服务器配置,虚拟主机
状态扩展
模块mod_vhost_alias

VirtualScriptAlias 指令允许您确定 Apache httpd 在哪里找到 CGI 脚本,类似于 VirtualDocumentRoot 对其他文档所做的那样。它匹配以 /cgi-bin/ 开头的 URI 的请求,就像 ScriptAlias /cgi-bin/ 一样。

top

VirtualScriptAliasIP 指令

描述为给定的虚拟主机动态配置 CGI 目录的位置
语法VirtualScriptAliasIP interpolated-directory|none
默认值VirtualScriptAliasIP none
上下文服务器配置,虚拟主机
状态扩展
模块mod_vhost_alias

VirtualScriptAliasIP 指令类似于 VirtualScriptAlias 指令,只是它使用连接服务器端的 IP 地址进行目录插值,而不是服务器名称。

可用语言:  en  |  fr  |  tr 

top

评论

注意
这不是问答部分。此处放置的评论应指向有关改进文档或服务器的建议,如果我们的版主认为这些评论已实施或被认为无效/与主题无关,则可能会被删除。有关如何管理 Apache HTTP Server 的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上)或发送到我们的 邮件列表