Назад | Перейти на главную страницу

Сессия потеряна в Jetty с использованием Apache в качестве прокси

Имею приложение на базе eXist-db. По сути, это веб-приложение Java, использующее Jetty. Он работает на удаленном сервере Linux за прокси-сервером Apache.

Я использую следующую конфигурацию Apache:

ServerName  domain.com
ProxyRequests       off
ProxyPass       /myapp   http://localhost:8899/exist/apps/myapp
ProxyPassReverse       /myapp   http://localhost:8899/exist/apps/myapp

Все работает нормально кроме сессий. По каждому запросу сеанс возобновляется. Это означает, что заголовок cookie запроса не содержит JSESSIONID но заголовок ответа Set-Cookie похож на JSESSIONID=oryq5odyt3f79xxax25n7x0h;Path=/exist. Также я проверяю идентификатор сеанса в приложении, которое каждый раз подтверждает, что сеанс новый.

Я пробовал три сценария тестирования:

Сценарий тестирования A:

Сценарий тестирования B:

Сценарий тестирования C (локальный):

Проблема появляется в обоих сценариях A и B, но не в C.

Есть идеи, как заставить сеансы работать?

Следующая конфигурация Apache решает проблему:

ServerName  domain.com
ProxyRequests       off
ProxyPass       /myapp   http://localhost:8899/exist/apps/myapp
ProxyPassReverse       /myapp   http://localhost:8899/exist/apps/myapp
ProxyPassReverseCookiePath /exist /

Он меняет путь от /exist к / в файлах cookie, чтобы сеанс был правильно сопоставлен с путем.

В некоторых случаях может потребоваться следующая директива для изменения домена в файлах cookie (но в моем случае это не понадобилось):

ProxyPassReverseCookieDomain localhost domain.com

Я нашел еще больше подробностей о переполнение стека.