Назад | Перейти на главную страницу

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.

ProxyPass очень придирчив к слэшам; поскольку вы проксируете завершающую косую черту (только корень, /), вы захотите проксировать ДО косой черты в конце.

Итак, добавление косой черты к вашим целям, как показано ниже, должно помочь.

Кроме того, поскольку устройство, которое вы проксируете, также является локальной системой, вы можете захотеть избежать возможной путаницы с разрешением имен / NAT, используя 127.0.0.1. То, что вы размещаете здесь, не имеет отношения к заголовку хоста, полученному сервером, и заголовок клиента передается, если у вас есть ProxyPreserveHost On устанавливать:

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

Если это не сработает, возможно, пусть host2 предоставит некоторую временную страницу содержимого, чтобы убедиться, что вы попали в правильный vhost.

Боковое примечание, вы этого не хотите <Proxy *> блок. Он создан для того, когда вы работаете ProxyRequests on режим и не работает должным образом для обратных прокси (используйте <Location> вместо контроля доступа)