Прокси-сервер Apache2 сохраняет доменное имя

Я пытаюсь реализовать схему Клиент браузера -> Прокси Apache2 -> Сервер приложений Tomcat. Apache2 и Tomcat на разных серверах. Но прокси работает не так, как я ожидал. Настройка виртуального хоста Apache2:

  <VirtualHost *:80 *:443>
    ServerName example.com
    ServerAlias www.example.com

    ProxyPass /MyApp http://tomcatdomain.com/MyApp
    ProxyPassReverse /MyApp tomcatdomain.com/MyApp
  </VirtualHost>

если я сделаю запрос на открытие страницы в браузере, http://example.com/MyApp , приложение откроется правильно, но URL будет другим - http://tomcatdomain.com/MyApp . Затем я смотрю на запрос Ajax и вижу, что он не работает по ожидаемой мной схеме:

 12:35:20.537 GET https://example.com/MyApp/service/test [HTTP/1.1 302  41ms]
 12:35:20.617 GET https://tomcatdomain.com/MyApp/service/test

Ожидается: [запрос] клиент-> apache2-> tomcat [ответ] tomcat-> apache2-> client

Собственно: [запрос] клиент-> apache2 [ответ] apache2-> клиент [запрос2] клиент -> tomcat [ответ2] tomcat -> клиент

Мой первый вопрос - как заставить клиента получать ответ от tomkat с одним query?

Следующая проблема с параметром ProxyPreserveHost - мне нужно сохранить исходный url-адрес (example.com) при открытии приложения (не tomcatdomain.com). Я добавляю ProxyPreserveHost к настройке appache2:

<VirtualHost *:80 *:443>
    ServerName example.com
    ServerAlias www.example.com

    ProxyPreserveHost On

    ProxyPass /MyApp http://tomcatdomain.com/MyApp
    ProxyPassReverse /MyApp tomcatdomain.com/MyApp
</VirtualHost>

Я также подготовил tomkat server.xml:

   <Host name="example.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
    <Alias>www.example.com</Alias>
    <Context path="" docBase="MyApp"/>
   </Host>

Я делаю запрос и вижу в браузере:

Страница не перенаправляется должным образом Firefox обнаружил, что сервер перенаправляет запрос на этот адрес способом, который никогда не будет завершен.

Я делаю запрос AJAX и вижу 22 идентичных запроса, на которые нет ответа:

 12:54:48.020 GET https://example.com/MyApp/service/test [HTTP/1.1 302  28ms]
 12:54:48.042 GET https://example.com/MyApp/service/test [HTTP/1.1 302  4ms]
 ... 22 requests!
 12:54:48.367 GET https://example.com/MyApp/service/test [HTTP/1.1 302  3ms]

Я считаю, что запрос не перенаправлен на сервер tomcat.

Чтобы подтвердить свои догадки, я исправил настройки Apache2:

  <VirtualHost *:80 *:443>
    ServerName example.com
    ServerAlias www.example.com

    ProxyPreserveHost On

    ProxyPass /MyApp http://tomcatdomain.com/MyApp**ABCD**
    ProxyPassReverse /MyApp tomcatdomain.com/MyApp**ABCD**
  </VirtualHost>

И в браузере я вижу: не обнаружена Запрошенный URL / MyAppABCD не найден на этом сервере. Сервер Apache / 2.4.27 (Ubuntu) на example.com Порт 80

Apache2 ищет отображение URL не на tomcat, а на том же apache2?

Подскажите, пожалуйста, как реализовать схему, когда браузер открыть страницу, данные будут получены от Tomcat через прокси Apache2, и исходный URL будет сохранен? Спасибо.

0
задан 12 February 2018 в 13:40
1 ответ

Проблема заключалась в самозаверяющих сертификатах на Apache2 и Tomcat. Пришлось сделать перекрестную сертификацию. Если вы удалите шифрование (SSL или TLS) между Apache2 и Tomcat (НЕ! WWW и Apache2), никаких дополнительных настроек не потребуется.

0
ответ дан 5 December 2019 в 06:32

Теги

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