Два обратных прокси с apache 2.4 и mod_proxy

Пытаюсь настроить окружение с двумя прокси. Идея состоит в том, что первый прокси-сервер перенаправляет на второй, а второй - на последнюю сеть.

Конфигурация работает для обычного запроса. но у меня проблемы с перенаправлением 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)
0
задан 9 December 2015 в 15:54
1 ответ

Я нашел проблему. Это директива 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>
0
ответ дан 5 December 2019 в 11:18

Теги

Похожие вопросы