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

我有一个设置如下:

内部IP为10.10.0.4的Linux Server(OpenVZ) – Container(10.10.0.5) – Container(10.10.0.6)

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

192.168.1.2 => 10.10.0.4在networking侧。

现在在主要的主机上.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等,使用一些倒退的方式find服务器名称报告10.10.0.5,而不是ct1.host.example.com,我需要,因为这需要在本地networking以外的工作。 当然,我可以破解这些部署中的每一个的代码,但是这并不能解决只是使用创可贴的问题。 我不知道为什么这是报告容器本地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,或实际上创build这些IP的内部DNS?

谢谢!

我想弄清楚为什么你使用这个mod_proxy。 基于名称的虚拟主机出于某种原因不适合您的使用情况?

我的问题的第二部分确实有效 – 尽pipe由于代码caching和应用程序的运行方式,它似乎没有马上出现。 通过在主机文件中创build一个本地条目(或简单地在主机上设置绑定),我不再需要代理IP到IP,而是保持主机名,以便在容器上运行Apache,就好像我键入URL到地址栏,而不是我之前尝试的IP。

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

感谢那些看着这个。