On this page
基于 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 中的任何人都可以通过网络读取其数据。在这种情况下,您将需要两个守护程序,每个守护程序以不同的User,Group,Listen和ServerRoot设置运行。
您可以承受侦听计算机上每个 IP 别名的内存和文件 Descriptors 要求。只能Listen到“通配符”地址或特定地址。因此,如果出于任何原因需要监听特定的地址,那么您将需要监听所有的特定地址。 (尽管一个httpd可以监听 N-1 个地址,另一个可以监听剩余的地址。)
在以下情况下使用单个守护程序:
可以在虚拟主机之间共享 httpd 配置。
该机器处理大量请求,因此运行单独的守护程序时的性能损失可能会很大。
设置多个守护程序
为每个虚拟主机创建一个单独的httpd安装。对于每个安装,请在配置文件中使用Listen指令选择守护程序服务的 IP 地址(或虚拟主机)。例如
Listen 192.0.2.100:80
建议您使用 IP 地址而不是主机名(请参阅DNS caveats)。
使用虚拟主机设置单个守护程序
对于这种情况,单个httpd将服务于主服务器和所有虚拟主机的请求。配置文件中的VirtualHost伪指令用于将ServerAdmin,ServerName,DocumentRoot,ErrorLog和TransferLog或CustomLog伪指令的值设置为每个虚拟主机的不同值。例如
<VirtualHost 172.20.30.40:80>
ServerAdmin webmaster@www1.example.com
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 webmaster@www2.example.org
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文档。