基于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 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>
建议在<VirtualHost>指令中使用IP地址而不是主机名(请参阅DNS警告)。
特定的IP地址或端口优先于其通配符等效项,并且匹配的任何虚拟主机均优先于服务器基础配置。
除了控制进程创建的指令和其他一些指令外,几乎所有配置指令都可以放入VirtualHost指令中。要确定在VirtualHost指令中是否可以使用指令,请使用 指令index检查上下文。
SuexecUserGroup
如果使用suEXEC包装器,则可以在VirtualHost指令内使用。
安全性:在指定将日志文件写入何处时,请注意如果启动Apache的用户以外的任何人都具有对其写入目录的写访问权,则存在某些安全风险。有关详细信息,请参阅安全提示文档。