基于 Apache IP 的虚拟主机支持

什么是基于 IP 的虚拟主机

基于 IP 的虚拟主机是一种基于接收请求的 IP 地址和端口来应用不同指令的方法。最常见的是,它用于在不同的端口或界面上为不同的网站提供服务。

在许多情况下,基于名称的虚拟主机更方便,因为它们允许许多虚拟主机共享一个地址/端口。请参见基于名称的虚拟主机与基于 IP 的虚拟主机帮助您做出决定。

System requirements

正如术语“基于 IP 的”所指示的那样,服务器 对于每个基于 IP 的虚拟主机 必须具有不同的 IP 地址/端口组合。这可以通过具有多个物理网络连接的计算机或使用大多数现代 os 支持的虚拟接口来实现(有关详细信息,请参见系统文档,这些通常称为“ ip 别名”,而“ ifconfig”命令为(最常用于设置它们)和/或使用多个端口号。

在 Apache HTTP Server 的术语中,使用单个 IP 地址但使用多个 TCP 端口的也是基于 IP 的虚拟主机。

如何设置 Apache

有两种方法来配置 apache 以支持多个主机。通过为每个主机名运行单独的httpd守护程序,或通过运行支持所有虚拟主机的单个守护程序。

在以下情况下使用多个守护程序:

  • 存在安全分区问题,例如 company1 不希望 company2 中的任何人都可以通过网络读取其数据。在这种情况下,您将需要两个守护程序,每个守护程序以不同的UserGroupListenServerRoot设置运行。

  • 您可以承受侦听计算机上每个 IP 别名的内存和文件 Descriptors 要求。只能Listen到“通配符”地址或特定地址。因此,如果出于任何原因需要监听特定的地址,那么您将需要监听所有的特定地址。 (尽管一个httpd可以监听 N-1 个地址,另一个可以监听剩余的地址。)

在以下情况下使用单个守护程序:

  • 可以在虚拟主机之间共享 httpd 配置。

  • 该机器处理大量请求,因此运行单独的守护程序时的性能损失可能会很大。

设置多个守护程序

为每个虚拟主机创建一个单独的httpd安装。对于每个安装,请在配置文件中使用Listen指令选择守护程序服务的 IP 地址(或虚拟主机)。例如

Listen 192.0.2.100:80

建议您使用 IP 地址而不是主机名(请参阅DNS caveats)。

使用虚拟主机设置单个守护程序

对于这种情况,单个httpd将服务于主服务器和所有虚拟主机的请求。配置文件中的VirtualHost伪指令用于将ServerAdminServerNameDocumentRootErrorLogTransferLogCustomLog伪指令的值设置为每个虚拟主机的不同值。例如

<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>

建议在指令中使用 IP 地址代替主机名(请参见DNS caveats)。

特定的 IP 地址或端口优先于其通配符等效项,并且匹配的任何虚拟主机均优先于服务器基础配置。

除了控制进程创建的指令和其他一些指令外,几乎可以将任何配置指令放入 VirtualHost 指令中。若要确定是否可以在 VirtualHost 指令中使用指令,请使用directive index检查Context

如果使用了suEXEC wrapper,则可以在 VirtualHost 指令内使用SuexecUserGroup

*安全性:*在指定将日志文件写入何处时,请注意如果启动 Apache 的用户以外的任何人都具有对其写入目录的写访问权,则存在某些安全风险。有关详细信息,请参见security tips文档。