Пытаюсь настроить окружение с двумя прокси. Идея состоит в том, что первый прокси-сервер перенаправляет на второй, а второй - на последнюю сеть.
Конфигурация работает для обычного запроса. но у меня проблемы с перенаправлением HTML.
Среда выглядит следующим образом:
M1 (with apache) M2 (with apache) M3 (e.g. Jetty)
host: h1 host: h2 host: h3
port:9001 port: 9002 port: 9003
proxy policies: proxy policies: webs:
/a/b/ *2:9002/ / *3:9003/ c
d
Обычный запрос - http: // h1: 9001 / a / b / d
. Перевод URL будет следующим:
(m1) http://h1:9001/a/b/d -> (m2) http://h2:9002/d -> (m3) http://h3:9003/d
Моя конфигурация работает для этого запроса.
Проблема в том, что я пытаюсь выполнить перенаправление HTML с веб-сайта c на d. (обычно 302). URL-адрес перенаправления должен вернуться в браузер. Перевод URL-адреса должен быть следующим:
(m1) http://h1:9001/a/b/c -> (m2) http://h2:9002/c -> (m3) http://h3:9003/c
---(redirection to http://h3:9003/d)---
(m3) http://h3:9003/d -> (m2) http://h2:9002/d -> (m1) http://h1:9001/a/b/d
---(making redirection)---
(m1) http://h1:9001/a/b/d -> (m2) http://h2:9002/d -> (m3) http://h3:9003/d
Проблема в том, что в браузере возвращается URL-адрес http: // h1: 9001 / d
, а не http: // h1: 9001. / a / b / d
Если второй прокси-сервер (m2) не существует, проблема не возникает, и адрес, возвращаемый браузеру, - http: // h1: a / b / d
В чем может быть проблема?
Заранее спасибо.
Файлы конфигурации:
извлечение httpd.conf в m1:
<VirtualHost *:9001>
ProxyRequests On
ProxyPreserveHost On
ProxyPass /a/b/ http://h2:9002/
ProxyPassReverse /a/b/ http://h2:9002/
</VirtualHost>
извлечение httpd.conf в m2:
<VirtualHost *:9002>
ProxyRequests On
ProxyPreserveHost On
ProxyPass / http://h3:9003/
ProxyPassReverse /a/b/ http://h3:9003/
</VirtualHost>
Я тестирую эту конфигурацию с помощью команды curl:
curl -L -i http://h1:7080/a/b/c
Результат:
HTTP/1.1 302 Found
Date: Wed, 09 Dec 2015 13:49:15 GMT
Server: Jetty(9.3.5.v20151012)
Location: http://h1:9001/d
Content-Length: 0
HTTP/1.1 404 Not Found
Date: Wed, 09 Dec 2015 13:49:15 GMT
Server: Apache/2.4.17 (Unix)
Content-Length: 201
Content-Type: text/html; charset=iso-8859-1
# ERROR BODY (404)
Я нашел проблему. Это директива ProxyPreserveHost в обратном прокси m1. Я думаю, что в правильной конфигурации директивы ProxyPreserveHost и ProxyRequests должны быть выключены
Окончательная конфигурация -
<VirtualHost *:9001>
ProxyRequests Off
ProxyPreserveHost Off
ProxyPass /a/b/ http://h2:9002/
ProxyPassReverse /a/b/ http://h2:9002/
</VirtualHost>
и
<VirtualHost *:9002>
ProxyRequests Off
ProxyPreserveHost Off
ProxyPass / http://h3:9003/
ProxyPassReverse /a/b/ http://h3:9003/
</VirtualHost>