Я пытаюсь настроить прокси в веб-сервере Apache, но у меня проблема с построением URL beacause в результирующем 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
; index.html виден, но все приложенные ресурсы (js, sockets, css и т.д.) отсутствуют, потому что их URL http://frontendserver/style.css
вместо http://frontendserver/webapp/style.css
.
Является ли это правильным методом для правильной настройки этого типа прокси?
Я пробовал некоторые другие решения также с модулем перезаписи Apache, но я не достиг хорошего результата, может у кого-то есть хорошее предложение для решения этой проблемы.
Thanks
ProxyPass
изменяет способ ответа на URL-адреса, но не перезаписывает URL-адреса в вашем index.html. Чтобы решить эту проблему, вы можете:
Переписать index.html, чтобы использовать относительные ссылки (css/style.css
) вместо абсолютных (/css/style.css
). , поэтому они по-прежнему работают с другой базой URL.
Используйте mod_proxy_html, чтобы переписать ссылки в исходящем контенте HTML, Javascript и CSS. Что-то вроде:
<Файлы *.html>
ProxyHTMLEnable Вкл.
ProxyHTMLLinks a href
...
ProxyHTMLURLMap http://frontendserver/ http://frontendserver/webapp/
файлы>
Первое решение лучше, если вы можете легко его реализовать, так как оно делает ваш контент переносимым и более надежным.
Второе решение может подойти вам, если все URL-адреса в вашем контенте являются статическими. Но mod_proxy_html ничего не знает о динамически вычисляемых URL-адресах — например, если вы вычисляете URL-адреса в Javascript. Так что в этом случае он потерпит неудачу, если вы также не измените свой код, чтобы использовать базу динамических URL-адресов.