Apache proxy configuration (webapp resources URL truncated)

Я пытаюсь настроить прокси в веб-сервере 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

0
задан 9 December 2020 в 12:20
1 ответ

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

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

  2. Используйте 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-адресов.

1
ответ дан 21 December 2020 в 14:21

Теги

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