Apache 子域名和主机重写

Apache 子域名和主机重写

以下是我尝试执行的基本操作。我有 2 台服务器,一台是实时服务器,一台是开发服务器。实时服务器有 2 个域与之相连。为简单起见,我们将它们称为 a.live.com 和 b.live.com。开发服务器有一个公共 IP 地址,但没有与之相连的主机。因此,我可以通过转到 11.22.33.44 来访问开发服务器,但实际上我无法使用主机名来访问它。(域显然仅指向实时服务器)

我刚刚创建了开发服务器,但无法访问这两个子域。我的机器上设置了一个 hosts 文件,将主机指向域:

11.22.33.44 a.live.com
11.22.33.44 b.live.com

我启用了这两个网站(它们都出现在 /etc/apache2/sites-enabled 中),但出于某种原因,每当我访问 b.live.com 时,它都会尝试访问我的开发服务器中的 a.live.com。所以我知道主机正确地指向了正确的服务器。此外,当我禁用 a.live.com 时,b.live.com 会正确地转到正确的子域。所以看起来 apache 以某种方式获取了我输入的任何域,并以某种方式按它想要的顺序对它们进行排序……这是我的 vhost 文件的一个示例

<VirtualHost *:80>
    ServerName a.live.com

    DocumentRoot /var/www/a/
    <Directory />
            Options FollowSymLinks
            AllowOverride all
    </Directory>
</VirtualHost>

b vhost文件完全相同,但是有明显的变化。

一些额外的说明:Dev 使用 apache 2.4,而 live 使用 2.2,这就是为什么我不能只复制和粘贴东西 =/(我们计划最终将 live 推送到 2.4,但我们首先想运行一个开发服务器并确保一切正常运行)

任何帮助都将不胜感激。我不太熟悉 apache 重写,所以不确定我是否做错了什么。

我已经对服务器故障进行了一些搜索,以下是一些常见问题的答案:我运行了

apachectl restart

修改完所有内容后。(据我所知,graceful 有时会遗漏一些东西,所以我进行了完全重启)我还运行了 configtest,它说语法没问题

先感谢您。

答案1

摘要有点误导,暗示存在 Apache mod_rewrite 问题,但事实并非如此。

您的主 httpd.conf 是否启用了 NameVirtualHosts?

NameVirtualHost *:80

如果启用该功能:

要进行进一步分析,请在您的 Apache 上启用日志记录。每个虚拟主机应记录到不同的日志文件,并尝试使用一些调试选项从您的客户端访问您的服务器,例如使用 curl:

curl -vvv http://a.live.com/
curl -vvv http://b.live.com/

这样你就可以找出你的客户端真正连接的是哪个IP,以及这个IP上真正访问的是哪个虚拟主机。

相关内容