В настоящее время я разрабатываю приложение, которое будет развернуто в контейнере Docker. Docker содержит Tomcat, который запускает приложение как ROOT .war, поэтому на верхнем уровне.
Идея состоит в том, что, когда наши пользователи запускают контейнер, они могут захотеть запустить несколько копий по указанному c путь к контексту на своих серверах каждый, например:
https://somedomain.com/a
и https://somedomain.com/b
Я планировал просто попросить их настроить обратный прокси-сервер следующим образом:
ProxyPreserveHost On
RewriteEngine On
# Map https://somedomain/a to http://internalserver:9001
RewriteRule ^/a$ /a/ [R]
ProxyPass /a/ http://internalserver:9001/
ProxyPassReverse /a/ http://internalserver:9001/
# Map https://somedomain/b to http://internalserver:9002
RewriteRule ^/b$ /b/ [R]
ProxyPass /b/ http://internalserver:9002/
ProxyPassReverse /b/ http://internalserver:9002/
Где 9001 и 9002 - это порты двух Docker контейнеров, в которых выполняются копии моего приложения.
Теперь, это заставляет приложение работать, но есть проблемы с файлами cookie, так как контекстный путь на сервере в Tomcat всегда пуст, и поэтому возникают проблемы с сеансом.
Я видел несколько вопросов о похожих ситуациях, но во всех случаях люди могут либо изменить путь публикации c или путь в Tomcat, чтобы они совпадали. В моем случае я просто не могу этого сделать, потому что я буду диктовать, какой путь должны использовать пользователи нашего программного обеспечения.
Вот примеры таких вопросов:
https://serverfault.com/questions/311994/how-to-proxy-context-to-different-backend-context-in-apache https://serverfault.com/questions/495017/how-do-i-ensure-the-context-path-is-the-same-when-accessing-a-web-app-via-apache Tomcat за ошибкой apache прокси на пути
Есть ли способ заставить эту настройку работать должным образом ?
Можно ли как-то изменить конфигурацию прокси для пересылки пути к контексту?
Есть ли другие варианты?