Apache Proxypass не разрешает URL для таких ресурсов, как изображения и CSS

Мне нужно сопоставить путь к моему веб-приложению Tomcat. Я использовал proxypass для этого. это текущий конфиг в apache2

<VirtualHost *:80>
        ServerName localhost:80
        ProxyPass /app http://localhost:8088/ui/
        ProxyPassReverse /app http://localhost:8088/ui/


        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Это получает HTML от tomcat, но сформированный URL CSS неправильный. Вместо http://localhost/app/css/style.cssURL отображается как http://localhost/ui/css/style.css,

Я пытался использовать переписать, но это не сработало.

RewriteEngine on
RewriteRule ^/ui/ /app/

Мне нужно найти правильный способ исправить URL. Любая помощь будет принята с благодарностью! Заранее спасибо.

2 ответа

Решение

После долгих проб и ошибок я нашел два разных решения моей проблемы.

  1. Использование mod_rewrite и некоторые изменения в proxypass:

    <VirtualHost *:80>
        ProxyPreserveHost On
        ProxyPass /app http://localhost:8080/ui/
        ProxyPassReverse /app http://localhost:8080/ui/
    
        #since in java web app the context started with /ui the js src had /ui in the beginning
        #this resulted in 404 so I had to rewrite all request to /ui to forward to /app
    
        RewriteEngine on
        RewriteRule    "^/ui(.+)"  "/app$1"  [R,L]
    
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    
  2. Создайте ссылку / ярлык для развернутого приложения в папке webapp и назовите ярлык как app В linux команда есть (из папки webapp) ln -s ui app

Теперь конфиг apache:

<VirtualHost *:80>
        ProxyPreserveHost On

        <Location /app>
            ProxyPass  ajp://localhost:8019/app/
            ProxyPassReverse ajp://localhost:8019/app/
            SetOutputFilter  proxy-html
            ProxyHTMLExtended On
            ProxyHTMLURLMap /app /app
            RequestHeader    unset  Accept-Encoding
        </Location>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

В первом решении мод rewrite заставляет запрос возвращать 304 перед перенаправлением на правильный URL. Вот как это работает по умолчанию.

Во втором решении, поскольку оба обработчика одинаковы (/ app), нет причин для перенаправления, и URL-адреса сопоставлены правильно.

Это зависит от того, что вы хотите, чтобы отображаемый URL был. Если вы хотите, чтобы это было

HTTP: // локальный / приложение /

Затем вам нужно переместить статический контент в / ui / в вашей WAR.

Если ты хочешь

HTTP: // локальный / приложение / щ

Затем вы должны удалить трейлинг / интерфейс из ваших строк ProxyPass

В качестве третьего варианта вы можете создать символическую ссылку "ROOT" на "ui" в каталоге веб-приложения tomcat (и удалить / ui из прокси-сервера), что позволит вам обслуживать ваше приложение из корня пути tomcat.

Другие вопросы по тегам