.png)
Я пытаюсь настроить прокси на веб-сервере 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. Чтобы исправить эту проблему, у вас есть следующие варианты:
Перепишите index.html так, чтобы использовались относительные ссылки (
css/style.css
) вместо абсолютных (/css/style.css
), чтобы они по-прежнему работали с другой базой URL.Использовать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.