Apache 报告本地 IP 而不是主机名

Apache 报告本地 IP 而不是主机名

我的设置如下:

Linux 服务器(OpenVZ)具有内部 IP 10.10.0.4 - 容器(10.10.0.5) - 容器(10.10.0.6)

由于 IP 空间有限,我只有一个公共 IP 映射到主服务器。4 因此

网络端192.168.1.2 => 10.10.0.4。

现在在主主机 .4 上我运行着 apache 接受端口 80 上的连接等等。使用 mod_proxy 可以拥有如下虚拟主机:

<VirtualHost 10.10.0.4:80 192.168.1.2>
    ServerAdmin [email protected]
    ServerName host.example.com
    ServerAlias ct1.host.example.com

    ProxyPass / http://10.10.0.5/
    ProxyPassReverse / http://10.10.0.5/
</VirtualHost>

并且有通配符 DNS 设置,以便 *.host.example.com 映射到 192.168.1.2。在容器上,设置了一个标准虚拟主机,如下所示:

<VirtualHost 10.10.0.5:80 *:80>
    ServerName ct1.host.example.com
    ServerAlias ct1.host.example.com
    ServerAdmin [email protected]
    DocumentRoot /var/www

    <Directory /var/www/>
      Options FollowSymLinks
      AllowOverride All
    </Directory>

    Options Indexes FollowSymLinks

    ErrorLog /var/logs/error_log
    CustomLog /var/logs/access_log common </VirtualHost>

这很好用 - 但是所有使用反向方式查找服务器名称的网站(例如 Joomla 等)都会报告 10.10.0.5,而不是 ct1.host.example.com,而我需要 ct1.host.example.com,因为这需要在本地网络之外工作。当然,我可以破解每个部署的代码,但这并不能解决问题,只是敷衍了事。我不知道为什么这会报告容器的本地 IP 而不是主机名。

我也尝试过以下设置:

/etc/hosts (在 .4 上)

10.10.0.5   ct1.host.example.com

然后在vHost中执行以下操作:

ProxyPass / http://ct1.host.example.com
ProxyPassReverse / http://ct1.host.example.com

但是这并没有产生任何不同。我需要在容器上进行进一步设置吗 - 可能是一些 DNS,或者实际上为这些 IP 创建内部 DNS?

谢谢!

答案1

我想知道您为什么要使用 mod_proxy。基于名称的虚拟主机是否出于某种原因不适合您的用例?

答案2

我的问题的第二部分确实有效 - 尽管由于代码缓存和应用程序的运行方式,它似乎并没有立即起作用。通过在主机文件中创建本地条目(或简单地在主机上设置绑定),我不再需要代理到 IP,而是保留主机名,因此对于在容器上运行的 Apache,就好像我在地址栏中输入了 URL,而不是我之前尝试过的 IP。

我最终在容器创建脚本中添加了一个挂钩,该脚本将 IP 添加到容器主机名的主机文件中,并在 conf.d 目录中创建 Apache 选取的虚拟主机。

感谢那些调查此事的人。

相关内容