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。
