<VirtualHost> 指令
描述: | 包含仅适用于特定主机名或IP地址的指令 |
---|---|
句法: | <VirtualHost addr[:port][addr[:port]]...>...</VirtualHost> |
内容: | 服务器配置 |
状态: | 核心 |
模组: | 核心 |
<VirtualHost>
并且</VirtualHost>
用于封装一组仅适用于特定虚拟主机的指令。可以使用虚拟主机上下文中允许的任何指令。当服务器在特定虚拟主机上收到对文档的请求时,它将使用本<VirtualHost>
节中随附的配置指令。Addr可以是以下任意一种,可以选择后面跟一个冒号和一个端口号(或*):
- 虚拟主机的IP地址;
- 虚拟主机IP地址的标准域名(不建议);
- 字符
*
,用作通配符并匹配任何IP地址。 - 字符串
_default_
,这是别名*
<VirtualHost 10.1.2.3:80> ServerAdmin webmaster@host.example.com DocumentRoot "/www/docs/host.example.com" ServerName host.example.com ErrorLog "logs/host.example.com-error_log" TransferLog "logs/host.example.com-access_log" </VirtualHost>
必须在方括号中指定IPv6地址,因为否则无法确定可选端口号。一个IPv6示例如下所示:
<VirtualHost [2001:db8::a00:20ff:fea7:ccea]:80> ServerAdmin webmaster@host.example.com DocumentRoot "/www/docs/host.example.com" ServerName host.example.com ErrorLog "logs/host.example.com-error_log" TransferLog "logs/host.example.com-access_log" </VirtualHost>
每个虚拟主机必须对应于服务器的不同IP地址,不同端口号或不同主机名,在前一种情况下,必须将服务器计算机配置为接受多个地址的IP数据包。(如果计算机没有多个网络接口,则可以使用以下ifconfig alias
命令完成此操作-如果您的操作系统支持该命令)。
注意
使用<VirtualHost>
并不会影响什么地址的Apache httpd的侦听。您可能需要确保Apache httpd使用监听正确的地址Listen
。
甲ServerName
应各自内部指定<VirtualHost>
块。如果不存在,ServerName
则将继承“主”服务器的配置。
收到请求后,服务器首先<VirtualHost>
仅基于本地IP地址和端口组合将其映射到最佳匹配。非通配符具有更高的优先级。如果根本没有基于IP和端口的匹配发生,则使用“主”服务器配置。
如果多个虚拟主机包含最匹配的IP地址和端口,则服务器会根据请求的主机名从这些虚拟主机中选择最匹配的主机。如果找不到匹配的基于名称的虚拟主机,则将使用与IP地址匹配的第一个列出的虚拟主机。因此,给定IP地址和端口组合的第一个列出的虚拟主机是该IP地址和端口组合的默认虚拟主机。
参见
- Apache HTTP Server虚拟主机文档
- 有关DNS和Apache HTTP Server的问题
- 设置Apache HTTP Server使用哪些地址和端口
- <Directory>,<Location>和<Files>部分的工作方式,以解释接收请求时如何组合这些不同的部分