Некоторое время назад я задал тот же вопрос, но, полагаю, я неправильно сформулировал свой вопрос. Я пытаюсь изменить прокси-сервер одного целого домена виртуального хоста на подкаталог другого виртуального хоста, что-то вроде этого 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>
вместо контроля доступа)