Приложение, обслуживаемое JBoss - использование сеанса apache proxypass недоступно

Я столкнулся со странной (для меня) ситуацией с java-приложением, обслуживаемым JBoss.

--Предыстория--

1) JBoss установлен в среде Linux.

Для пояснения IP-адрес в моей среде: 99.999.999.99.

2) В среде у меня запущен JBoss по адресу: http://127.0.0.1:8080.

С несколькими приложениями, которые доступны по адресу: http://127.0.0.1:8080/APPLICATION_NAME.

3) У меня есть маршрутизация трафика apache на мой IP-адрес следующим образом:

ProxyPass / http://127.0.0.1:8080/app1/
ProxyPassReverse / http://127.0.0.1:8080/app1/

ProxyPass /app2/ http://127.0.0.1:8080/app2/
ProxyPassReverse /app2/ http://127.0.0.1:8080/app2/

ProxyPass /app3/ http://127.0.0.1:8080/app3/
ProxyPassReverse /app3/ http://127.0.0.1:8080/app3/

4) Когда я получаю доступ к 99.999.999.99, я могу получить доступ к приложению 1, которое работает, как и ожидалось (за исключением проблемы ниже).

Когда я получаю доступ к 99.999.999.99/app2, я могу получить доступ к app2.

--Проблема--

1) Внутри app1 у меня есть страница jsp, которая записывает в сеанс:

_sessionTest1.jsp session.setAttribute("тест", "тест");

2) Проблема в том, что после запуска этого JSP сессия не будет содержать те данные, которые были заданы.

3) Если я удалю прокси-серверы apache и вместо этого открою корень JBoss, а также ссылки для администрирования и консоль JMX, сеанс будет обновлен, как и ожидалось.

При такой настройке способ доступа к приложению:

99.999.999.99/приложение1

Где 99.999.999.99 покажет мой корень JBoss.

4) Ожидается ли, что сеанс для приложения будет недоступен, если он настроен, как указано выше?

Спасибо!


person user1329237    schedule 12.04.2012    source источник


Ответы (3)


Оказывается, проблема заключалась в том, что apache нужно было настроить для поиска информации о сеансе из файла cookie, а не из URL-адреса, который используется по умолчанию.

person user1329237    schedule 21.04.2012

У меня была такая же проблема с Apache, проксирующим Jetty. Правило было:

ProxyPass /myapp http://localhost:8080
ProxyPassReverse /myapp http://localhost:8080

Который проксировал https://myhost/myapp на http://localhost:8080. В целом это работало, но сессия в myapp не сохранялась между запросами. Добавление следующего правила исправило это:

ProxyPassReverseCookiePath / /myapp
person chris    schedule 03.06.2012

Я считаю, что ваше первое заявление о доверенности на самом деле должно быть вашим последним. Apache остановится на первом правиле, которое соответствует URL-адресу, поэтому все ваши запросы через ваш веб-сервер перехватывают правило 1 с общим /.

ProxyPass /app1/ http://127.0.0.1:8080/app1/
ProxyPassReverse /app1/ http://127.0.0.1:8080/app1/

ProxyPass /app2/ http://127.0.0.1:8080/app2/
ProxyPassReverse /app2/ http://127.0.0.1:8080/app2/

ProxyPass /app3/ http://127.0.0.1:8080/app3/
ProxyPassReverse /app3/ http://127.0.0.1:8080/app3/

ProxyPass / http://127.0.0.1:8080/app1/
ProxyPassReverse / http://127.0.0.1:8080/app1/
person Zach    schedule 12.04.2012
comment
Спасибо, с этим вы правы. На самом деле он был последним, но я поставил его первым в объяснении, чтобы попытаться сделать его более ясным. - person user1329237; 12.04.2012