• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 基于 IP 的虚拟主机 (每个 IP 一个站点)

    系统要求

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

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

    如何设置Apache

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

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

    • 存在安全分区问题,例如company1不希望company2中的任何人都可以通过网络读取其数据。在这种情况下,你需要两个守护进程,具有不同的每次运行UserGroupListen,和ServerRoot设置。
    • 您可以承受侦听计算机上每个IP别名的内存和文件描述符要求。只能访问Listen“通配符”地址或特定地址。因此,如果出于任何原因需要监听特定的地址,则需要监听所有特定的地址。(尽管一个人httpd可以监听N-1个地址,而另一个人可以监听剩余的地址。)

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

    • 可以在虚拟主机之间共享httpd配置。
    • 该机器处理大量请求,因此运行单独的守护程序时的性能损失可能会很大。

    设置多个守护程序

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

    Listen 192.0.2.100:80
    

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

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

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

    <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的用户以外的任何人都具有对其写入目录的写访问权,则存在某些安全风险。有关详细信息,请参阅安全提示文档。