Apache 虚拟主机 - Mod 代理问题

Apache Virtual Host - Mod Proxy issues

不太熟悉 Apache,之前设置简单的虚拟主机没有问题。似乎有一个奇怪的,使用 1 个 IP 地址和多个服务器。

我的第二个虚拟主机似乎只查看前 2 个条目而忽略其余条目。我已经绘制出我想要发生的事情以及我的虚拟主机文件的外观,第二张图片是正在发生的事情。

How my virtual hosts are setup and envision the routing to act

How it's currently operating

现在在两台服务器上使用虚拟主机可能不对?

不太熟悉 Apache,之前设置简单的虚拟主机没有问题。似乎有一个奇怪的,使用 1 个 IP 地址和多个服务器。

我的第二个虚拟主机似乎只查看前 2 个条目而忽略其余条目。我已经绘制出我想要发生的事情以及我的 vhost 文件的外观,第二张图片是正在发生的事情。

服务器 1

<VirtualHost *:80>
    ServerName server1.domain.com
    ServerAlias x.domain.com
    DocumentRoot /var/www/html
</VirtualHost>

<VirtualHost *:80>
    ServerName server2.domain.com
    ServerAlias y.domain.com

    ProxyPreserveHost On
    <Proxy *>
      Order allow,deny
      Allow from all
    </Proxy>
    ProxyPass / http://server2
    ProxyPassReverse / http://server2

</VirtualHost>

<VirtualHost *:80>
    ServerName server2.domain.com
    ServerAlias z.domain.com

    ProxyPreserveHost On
    <Proxy *>
      Order allow,deny
      Allow from all
    </Proxy>
    ProxyPass / http://server2
    ProxyPassReverse / http://server2

</VirtualHost>

<VirtualHost *:80>
    ServerName server2.domain.com
    ServerAlias w.domain.com
    ProxyRequests Off
    <Proxy *>
       Order deny,allow
       Allow from all
    </Proxy>
   ProxyPass / http://server2
   ProxyPassReverse / http://server2
</VirtualHost>

服务器 2

<VirtualHost *:80>
    ServerName server2.domain.com
    DocumentRoot /var/www/html
</VirtualHost>

<VirtualHost *:80>
    ServerName server2.domain.com
    ServerAlias z.domain.com
    DocumentRoot /var/www/html/z
</VirtualHost>

<VirtualHost *:80>
    ServerName server2.domain.com
    ServerAlias w.domain.com
    DocumentRoot /var/www/html/w
</VirtualHost>

<VirtualHost *:80>
    ServerName server2.domain.com
    ServerAlias y.domain.com
    DocumentRoot /var/www/html/y
</VirtualHost>

避免为任何两个 VirtualHost 条目提供相同的服务器名称。使用 x、y、z 等名称完全没问题(假设外部用户都解析为同一个 IP 地址)。

为简单起见(维护和管理配置)也避免将 "standard" 服务器配置(例如 server1 上的 x)与 VirtualHost 配置混合。 Web 命名空间上的任何可访问区域都应通过 VirtualHost 配置。 (在这种情况下,您配置中的第一个成为 "default"。)

在两台服务器上使用 VirtualHosts 本身不是问题。您只需要确保来自原始 HTTP 请求的 ServerName 被正确转发并到达 server2。为此,您需要添加

ProxyPreserveHost On

到您的 VirtualHost 配置。

但是,放弃使用 server2 的基于名称的 VirtualHosts 并转而为各个(逻辑)主机使用不同的 IP 地址或端口可能会更容易。 Server2 是(至少在概念上)一个内部设置并且对 "external" 端不可见。因此,易用性并不能真正归因于