mod_vhost_alias
描述: | 提供动态配置的群发虚拟主机 |
状态: | 延期 |
模块标识符: | vhost_alias_module |
源文件: | mod_vhost_alias.c |
摘要
此模块通过允许将 HTTP 请求的 IP 地址 and/or Host:
标头用作路径名的一部分来确定要提供的 files,从而创建动态配置的虚拟主机。这允许容易地使用具有类似配置的大量虚拟主机。
注意
如果mod_alias或mod_userdir用于将 URI 转换为文件名,则它们将覆盖下面描述的mod_vhost_alias指令。例如,以下 configuration 将在所有情况下 map /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/"
目录名称插值
该模块中的所有指令都将 string 插入到路径名中。内插的 string(以下称为“name”)可以是服务器 name(有关如何确定的详细信息,请参阅UseCanonicalName指令)或 dotted-quad 格式的服务器上虚拟 host 的 IP 地址。插值由printf
启发的说明符控制,它具有多种格式:
%% | 插入% |
%p | 插入虚拟 host 的 port 号 |
%N.M | insert(部分)name |
N
和M
用于指定 name 的子字符串。N
从 name 的 dot-separated 组件中选择,M
选择N
选择的字符。M
是可选的,如果不存在则默认为零;当且仅当M
存在时,该点必须存在。解释如下:
0 | 整个 name |
1 | 第一部分 |
2 | 第二部分 |
-1 | 最后一部分 |
-2 | 倒数第二部分 |
2+ | 第二部分和所有后续部分 |
-2+ | 倒数第二个和所有前面的部分 |
1+ 和-1+ | 与0 相同 |
如果N
或M
大于可用零件数,则插入单个下划线。
例子
对于简单的 name-based 虚拟主机,您可以在服务器 configuration 文件中使用以下指令:
UseCanonicalName Off VirtualDocumentRoot "/usr/local/apache/vhosts/%0"
文件/usr/local/apache/vhosts/www.example.com/directory/file.html
将满足http://www.example.com/directory/file.html
的请求。
对于非常大量的虚拟主机,安排 files 以减小vhosts
目录的大小是一个很好的选择。为此,您可以在 configuration 文件中使用以下内容:
UseCanonicalName Off VirtualDocumentRoot "/usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2"
文件/usr/local/apache/vhosts/example.com/d/o/m/domain/directory/file.html
将满足http://www.domain.example.com/directory/file.html
的请求。
对于 example,可以通过从 name 的末尾进行散列来实现更均匀的 files 扩展:
VirtualDocumentRoot "/usr/local/apache/vhosts/%3+/%2.-1/%2.-2/%2.-3/%2"
example 请求来自/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+"
example 请求来自/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 example.com
始终 yield 域 name 和 tld)可能是有益的,无论附加到主机名的子域的数量是多少。因此,可以进行 configuration,将所有第一,第二或第三 level 子域指向同一目录:
VirtualDocumentRoot "/usr/local/apache/vhosts/%-2.0.%-1.0"
在上面的 example 中,www.example.com
以及www.sub.example.com
或example.com
都将指向/usr/local/apache/vhosts/example.com
。
对于 IP-based 虚拟主机,您可以在 configuration 文件中使用以下内容:
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,则文件/usr/local/apache/vhosts/10/20/30/40/docs/directory/file.html
将满足http://www.domain.example.com/directory/file.html
的请求。执行程序/usr/local/apache/vhosts/10/20/30/40/cgi-bin/script.pl
将满足http://www.domain.example.com/cgi-bin/script.pl
的请求。
如果要在VirtualDocumentRoot
指令中包含.
字符,但它与%
指令冲突,则可以通过以下方式解决问题:
VirtualDocumentRoot "/usr/local/apache/vhosts/%2.0.%3.0"
文件/usr/local/apache/vhosts/domain.example/directory/file.html
将满足http://www.domain.example.com/directory/file.html
的请求。
LogFormat指令%V
和%A
与此模块一起使用非常有用。
VirtualDocumentRoot 指令
描述: | 动态配置给定虚拟 host 的文档根目录的位置 |
句法: | VirtualDocumentRoot interpolated-directory\|none |
默认: | VirtualDocumentRoot none |
Context: | server config,virtual host |
状态: | 延期 |
模块: | mod_vhost_alias |
VirtualDocumentRoot
指令允许您根据服务器 name 的 value 确定 Apache HTTP Server 将在何处找到您的文档。扩展 interpolated-directory 的结果用作文档树的根,其方式与DocumentRoot指令的参数类似。如果 interpolated-directory 是none
则关闭VirtualDocumentRoot
。该指令不能与VirtualDocumentRootIP在同一 context 中使用。
注意
VirtualDocumentRoot
将覆盖您可能放在同一 context 或子上下文中的任何DocumentRoot指令。将VirtualDocumentRoot
放在 global 服务器作用域中将有效地覆盖稍后定义的任何虚拟主机中的DocumentRoot指令,除非您在每个虚拟 host 中将VirtualDocumentRoot
设置为None
。
VirtualDocumentRootIP 指令
描述: | 动态配置给定虚拟 host 的文档根目录的位置 |
句法: | VirtualDocumentRootIP interpolated-directory\|none |
默认: | VirtualDocumentRootIP none |
Context: | server config,virtual host |
状态: | 延期 |
模块: | mod_vhost_alias |
VirtualDocumentRootIP
指令与VirtualDocumentRoot指令类似,不同之处在于它使用连接的服务器端的 IP 地址进行目录插值而不是服务器 name。
VirtualScriptAlias 指令
描述: | 动态配置给定虚拟 host 的 CGI 目录的位置 |
句法: | VirtualScriptAlias interpolated-directory\|none |
默认: | VirtualScriptAlias none |
Context: | server config,virtual host |
状态: | 延期 |
模块: | mod_vhost_alias |
VirtualScriptAlias
指令允许您确定 Apache httpd 将以类似于VirtualDocumentRoot为其他文档的方式查找 CGI 脚本的位置。它匹配从/cgi-bin/
开始的 URI 请求,就像ScriptAlias 指令/cgi-bin/
那样。
VirtualScriptAliasIP 指令
描述: | 动态配置给定虚拟 host 的 CGI 目录的位置 |
句法: | VirtualScriptAliasIP interpolated-directory\|none |
默认: | VirtualScriptAliasIP none |
Context: | server config,virtual host |
状态: | 延期 |
模块: | mod_vhost_alias |
VirtualScriptAliasIP
指令与VirtualScriptAlias指令类似,不同之处在于它使用连接的服务器端的 IP 地址进行目录插值而不是服务器 name。