Apache:反向代理整个域

前一段时间我问了同样的问题,但是我想我没有把我的问题说得对。 我试图将一个整个虚拟主机代理逆转到另一个虚拟主机的子目录,例如http://host2.com – > http://host1.com/host2 。

Apache的默认站点文件是这样的

<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName "host1.com" <Directory /srv/www/host1> Options Indexes FollowSymLinks MultiViews AllowOverride None Order deny,allow Allow from all </Directory> DocumentRoot /srv/www/host1 WSGIScriptAlias / /srv/www/host1/apache/django.wsgi </VirtualHost> <VirtualHost *:80> ServerAdmin webmaster@localhost ServerName "host2.com" ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://host1.com/host2 ProxyPassReverse / http://host1.com/host2 </VirtualHost> 

在这个时候,问题是每当我去http://host2.com它显示我http://host1.com而不是http://host1.com/host2 。 我错过了什么? 我不知道是否应该重要,但host1是使用Django与wsgi进行托pipe。

ProxyPass对于斜杠非常挑剔; 由于您代理的是尾部斜线(只是根, / ),因此您需要代理尾部斜线。

所以,如下图所示,在你的目标中添加一些尾部的斜线应该是有帮助的。

此外,由于您正在代理的设备也是本地系统,因此您可能需要使用127.0.0.1避免潜在的名称parsing/ NAT混淆。 你放在这里的东西与服务器收到的主机头没有关系,只要你有ProxyPreserveHost On设置:

 ProxyPreserveHost On ProxyPass / http://127.0.0.1/host2/ ProxyPassReverse / http://127.0.0.1/host2/ 

如果这不起作用,那么可以通过host2提供一些临时内容页面来validation您是否正确地使用了虚拟主机。

注意,你不需要那个<Proxy *>块。 它是为在ProxyRequests on模式下运行时ProxyRequests on ,并且不适用于反向代理(使用<Location>代替访问控制)