Apache:反向代理整个域

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 是使用带有 wsgi 的 Django 托管的。

答案1

ProxyPass对于斜杠非常挑剔;因为您要代理尾部斜杠(仅根/),所以您需要代理 TO 尾部斜杠。

因此,在目标中添加一些尾随斜杠(如下所示)应该会有所帮助。

此外,由于您代理的设备也是本地系统,因此您可能希望使用 127.0.0.1 来避免潜在的名称解析/NAT 混淆。您在此处放置的内容与服务器收到的主机标头无关,只要您设置了以下内容,客户端标头就会传递ProxyPreserveHost On

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

如果这不起作用,也许可以让 host2 提供一些临时内容页面来验证您是否访问了正确的 vhost。

附注:您不需要该<Proxy *>块。它是为您在模式下运行时构建的ProxyRequests on,并且无法按预期用于反向代理(<Location>而是用于访问控制)

相关内容