Apache 虚拟主机 - Mod 代理问题

标签 apache proxy centos virtual host

对 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 个条目而忽略了其余条目。我已经绘制出了我想要发生的事情以及我的虚拟主机文件的外观,第二张图片就是正在发生的事情。

服务器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 条目提供相同的 Servername。使用 x、y、z 等名称是完全可以的(假设所有解析为来自外部用户的一个 IP 地址)。

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

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

ProxyPreserveHost On

到您的 VirtualHost 配置。

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

关于Apache 虚拟主机 - Mod 代理问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35998590/

相关文章:

java - 尝试创建代理,不起作用

Linux CentOs 重启服务

linux - 如何为 su 或 sudo 设置 LD_PRELOAD?

apache - 您可以使用 mod_rewrite 删除用户代理吗

php - 远程禁用apache服务器和mysql数据库

svn - 如何为 TeamCity 配置代理设置?

java - Java如何使用系统代理设置访问网站

Apache2 SSL 设置适用于静态 IP 但不适用于域名

java - Tomcat 数据库连接,我这样做对吗?

php - 插入批量记录时脚本过期