Apache прокси другой контекст пути готовить ie проблема - PullRequest
0 голосов
/ 29 января 2020

В настоящее время я разрабатываю приложение, которое будет развернуто в контейнере 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 прокси на пути


Есть ли способ заставить эту настройку работать должным образом ?

Можно ли как-то изменить конфигурацию прокси для пересылки пути к контексту?

Есть ли другие варианты?

1 Ответ

0 голосов
/ 29 января 2020

Хорошо, я нашел довольно простое решение. Может быть, это поможет кому-то еще, поэтому я опубликую это здесь:

Я понял, что есть опция конфигурации прокси под названием ProxyPassReverseCookiePath, которая предназначена для использования именно для того, чего я пытался достичь, поэтому я изменил конфигурацию следующим образом:

RewriteRule      ^/a$ /a/ [R]
<Location /a/>
  ProxyPass        http://internalserver:9001/
  ProxyPassReverse http://internalserver:9001/
  ProxyPassReverseCookiePath / /a
</Location>
RewriteRule      ^/b$ /b/ [R]

<Location /b/>
  ProxyPass        http://internalserver:9002/
  ProxyPassReverse http://internalserver:9002/
  ProxyPassReverseCookiePath / /b
</Location>

Это отображает каждый путь повара ie, идущий с внутреннего сервера, с путем от / до /a или /b в зависимости от приложения, это именно то, что я хотел. Само приложение теперь всегда устанавливает путь cook ie равным /, если нет доступного пути контекста. Обратный прокси-сервер затем сопоставляет его с тем местом, откуда он был запрошен.

...