У меня есть apache, обслуживающий одно локальное приложение "/
"со своими статическими файлами"/static
"
И еще одно приложение с mod_proxy
:
ProxyPreserveHost On
ProxyPass "/example" "http://127.0.0.1:9090/"
ProxyPassReverse "/example" "http://127.0.0.1:9090/"
И это приложение само по себе имеет статический контент "/static
"но когда он приходит через прокси, то ткет файлы с первого.
¿Есть ли способ подать "/static
"каждому в зависимости от того, откуда исходит восстановление?
Учитывая ваш пример, я бы ожидал, что статические файлы tomcat, расположенные в http://127.0.0.1:9090/static
быть доступным под http://127.0.0.1/example/static
при использовании прокси.
Возможное решение 1
Я думаю, что лучшим практическим решением было бы изменить использование относительных путей в приложении tomcat вместо абсолютного пути, поэтому статические файлы использовали последний путь;
<img src="static/my_image.jpg"></img>
или корневой родственник сервера;
<img src="/example/static/my_image.jpg"></img>
и это будет правильно обслуживать изображения, например
http://127.0.0.1/example/static/my_image.jpg
возможное решение 2
Переименуйте статические файлы apache во что-нибудь еще и явно проксируйте путь / static для tomcat;
# move the locate apache static files to somewhere else;
# http://127.0.0.1/static_apache etc
ProxyPass /static http://127.0.0.1:9090/static
ProxyPassReverse /static http://127.0.0.1:9090/static
ProxyPass "/example" "http://127.0.0.1:9090"
ProxyPassReverse "/example" "http://127.0.0.1:9090"
Также обратите внимание:
Заказ директив ProxyPass
Настроенные правила ProxyPass и ProxyPassMatch проверяются в порядке настройки. Первое подходящее правило побеждает. Поэтому обычно вам следует сортировать конфликтующие правила ProxyPass, начиная с самых длинных URL-адресов. В противном случае более поздние правила для более длинных URL-адресов будут скрыты любым более ранним правилом, которое использует ведущую подстроку URL-адреса.
Возможно хакерское решение
Определить, был ли запрос инициирован из приложения tomcat с помощью проверки заголовка referer;
RewriteEngine on
# match the app in the referer before processing the rule
RewriteCond %{HTTP_REFERER} /example
# reverse-proxy the request to the back-end
RewriteRule ^/static(/.*)?$ http://127.0.0.1:9090/static$1 [P]
(Я не тестировал это последнее решение, так как это могло показаться новинкой ...)