Имею приложение на базе 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
Я нашел еще больше подробностей о переполнение стека.