Apache HTTP Server 版本 2.4
基于 IP 的虚拟主机是一种根据请求接收的 IP 地址和端口应用不同指令的方法。最常见的是,它用于在不同的端口或接口上提供不同的网站。
在许多情况下,基于名称的虚拟主机 更方便,因为它们允许许多虚拟主机共享单个地址/端口。请参阅 基于名称的虚拟主机与基于 IP 的虚拟主机,以帮助您做出决定。
正如术语“基于 IP”所表明的那样,服务器**必须为每个基于 IP 的虚拟主机拥有不同的 IP 地址/端口组合**。这可以通过机器拥有多个物理网络连接来实现,或者通过使用大多数现代操作系统支持的虚拟接口来实现(有关详细信息,请参阅系统文档,这些接口通常称为“IP 别名”,并且“ifconfig”命令最常用于设置它们),以及/或使用多个端口号。
在 Apache HTTP Server 的术语中,使用单个 IP 地址但使用多个 TCP 端口,也被称为基于 IP 的虚拟主机。
有两种方法可以配置 Apache 以支持多个主机。要么为每个主机名运行一个单独的 httpd
守护进程,要么运行一个支持所有虚拟主机的单个守护进程。
在以下情况下使用多个守护进程
User
、Group
、Listen
和 ServerRoot
设置运行。Listen
到“通配符”地址或特定地址。因此,如果您出于任何原因需要监听特定地址,那么您将需要监听所有特定地址。(尽管一个 httpd
可以监听 N-1 个地址,而另一个可以监听剩余的地址。)在以下情况下使用单个守护进程
为每个虚拟主机创建一个单独的 httpd
安装。对于每个安装,在配置文件中使用 Listen
指令来选择该守护进程服务的 IP 地址(或虚拟主机)。例如:
Listen 192.0.2.100:80
建议您使用 IP 地址而不是主机名(请参阅 DNS 注意事项)。
对于这种情况,单个 httpd
将为主服务器和所有虚拟主机提供请求服务。配置文件中的 VirtualHost
指令用于将 ServerAdmin
、ServerName
、DocumentRoot
、ErrorLog
和 TransferLog
或 CustomLog
配置指令的值设置为每个虚拟主机的不同值。例如:
<VirtualHost 172.20.30.40:80> ServerAdmin [email protected] DocumentRoot "/www/vhosts/www1" ServerName www1.example.com ErrorLog "/www/logs/www1/error_log" CustomLog "/www/logs/www1/access_log" combined </VirtualHost> <VirtualHost 172.20.30.50:80> ServerAdmin [email protected] DocumentRoot "/www/vhosts/www2" ServerName www2.example.org ErrorLog "/www/logs/www2/error_log" CustomLog "/www/logs/www2/access_log" combined </VirtualHost>
建议您在 <VirtualHost> 指令中使用 IP 地址而不是主机名(请参阅 DNS 注意事项)。
特定 IP 地址或端口优先于其通配符等效项,并且任何匹配的虚拟主机优先于服务器的基本配置。
几乎**所有**配置指令都可以放在 VirtualHost 指令中,除了控制进程创建和其他一些指令的指令。要了解指令是否可以在 VirtualHost 指令中使用,请使用 指令索引 检查 上下文。
SuexecUserGroup
可以在 VirtualHost 指令中使用,如果使用 suEXEC 包装器。
安全:在指定日志文件写入位置时,请注意一些安全风险,这些风险存在于除启动 Apache 的用户以外的任何人对写入日志文件的目录具有写入权限的情况下。有关详细信息,请参阅 安全提示 文档。