【问题标题】:Apache Virtual Host - Mod Proxy issuesApache 虚拟主机 - Mod 代理问题
【发布时间】:2016-06-30 03:26:57
【问题描述】:

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

【问题讨论】:

  • 我不确定您的配置是否正确。由于您的所有 ServerNames 在 server1 虚拟主机配置上都读取“server2,domain.com”,它们实际上是冲突的。因此,只有第一个条目可能适用。与 server2 配置相同。您能否添加如何通过 http 调用此设置?
  • 因此进入网络的入口点是服务器 1,因为我只有 1 个面向公众的 IP 地址。为什么我使用服务器 1 路由到服务器 2 是因为我不想为了便于使用而使用不同的端口号,例如 server1.domain.com:81。因此,任何选定的子域 z、w 和 y。应该只定向到第二台服务器,然后从那里服务器 2 个虚拟主机将子域定向到正确的文件夹。

标签: apache proxy centos virtual host


【解决方案1】:

避免为任何两个 VirtualHost 条目提供相同的 Servername。使用 x、y、z 等名称是完全可以的(假设全部解析为来自外部用户的一个 IP 地址)。

为了简单起见(维护和管理配置),还要避免将“标准”服务器配置(例如 server1 上的 x)与 VirtualHost 混合。 Web 命名空间上的任何可访问区域都应通过 VirtualHost 进行配置。 (在这种情况下,您的配置中的第一个将变为“默认”。)

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

ProxyPreserveHost On

到您的 VirtualHost 配置。

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

【讨论】:

  • 感谢您的 cmets,真的尽量避免使用端口,而只是针对子域拥有一切。
  • 无论你做什么,server2都需要基本信息来区分你的各种虚拟主机。否则,它们只会位于单个匹配条目(例如第一个)。这就是你观察到的......
  • 好的,所以我的问题与防火墙/端口有关。第一个问题是 ProxyPass,ProxyPassReverse 是“/server2”,它必须是“/server2”,所以缺少最后一个破折号。除此之外,我正在为这台服务器翻译 81 到 80。所以 ProxyPass 和 ProxyPassReverse 看起来像“/server2:81”
猜你喜欢
  • 2015-10-06
  • 2011-05-20
  • 2012-11-16
  • 2012-10-29
  • 2011-07-31
  • 2010-11-08
  • 1970-01-01
  • 2011-05-05
  • 2011-03-19
相关资源
最近更新 更多