Конфигурация прокси-сервера Apache (URL-адрес ресурсов веб-приложения сокращен)

Конфигурация прокси-сервера Apache (URL-адрес ресурсов веб-приложения сокращен)

Я пытаюсь настроить прокси на веб-сервере Apache, но у меня возникла проблема с построением URL, поскольку в полученном URL отсутствует часть пути. Пример:

http://server/webapp/style.css(ожидал)

http://server/style.css(реальный результат)

У меня есть сервер, выставленный в сети (который я назову frontendserver), и другой сервер (backendserver) во внутренней сети (недоступный из сети), где находится веб-приложение, которое я хочу проксировать наружу. Я пробовал несколько методов, и главная проблема в том, что в прокси URL не (пере)писан правильно, сервер или браузер пропускают часть.

Что я пробовал:

ProxyPass /webapp http://backendserver
ProxyPassReverse /webapp http://backendserver

URL-адрес приложения в браузере правильный http://frontendserver/webapp;индекс.htmlвиден, но все присоединенные ресурсы (js, сокеты, css и т. д.) отсутствуют, поскольку их URL-адреса http://frontendserver/style.cssвместо http://frontendserver/webapp/style.css.


Правильный ли это метод для правильной настройки прокси-сервера такого типа?

Я пробовал другие решения с модулем Apache rewrite, но они не дали хорошего результата. Возможно, у кого-то есть хорошее предложение по решению этой проблемы.

Спасибо

решение1

ProxyPassизменяет способ ответа на URL, но не переписывает URL в вашем index.html. Чтобы исправить эту проблему, у вас есть следующие варианты:

  1. Перепишите index.html так, чтобы использовались относительные ссылки ( css/style.css) вместо абсолютных ( /css/style.css), чтобы они по-прежнему работали с другой базой URL.

  2. Использоватьmod_proxy_htmlдля переписывания ссылок в вашем исходящем HTML, Javascript и CSS контенте. Что-то вроде:

    <Files *.html>
      ProxyHTMLEnable On
      ProxyHTMLLinks  a  href
      ...
      ProxyHTMLURLMap http://frontendserver/ http://frontendserver/webapp/
    </Files>
    

Первое решение лучше всего, если вы можете легко его реализовать, поскольку оно делает ваш контент портативным и более надежным.

Второе решение может сработать, если все URL в вашем контенте статические. Но mod_proxy_html ничего не знает о динамически вычисляемых URL, например, если вы вычисляете URL в Javascript. Так что в этом случае он не сработает, если вы также не измените свой код для использования динамической базы URL.

Связанный контент