Подтвердить что ты не робот

Липкий сеанс с сервером apache и серверами tomcat

Я использую веб-сервер Apache как балансировщик нагрузки для двух экземпляров tomcat за apache. Когда первый запрос отправляется на node A, а второй запрос от того же клиента переходит на node B, я могу использовать переменные сеанса доступа в node A. Это очевидно. Я занимался серфингом в Интернете и обнаружил, что помощь в липких сеансах поможет. Но все учебные пособия для включения липких сессий в Apache выглядят запутанными. Есть ли простой пошаговый учебник для этого? Пожалуйста, помогите.

Кодовый фрагмент из комментария:

ProxyPass /balancer-manager ! 
ProxyPass /balancer://mycluster/ stickysession=JSESSIONID 
ProxyPassReverse /balancer://mycluster/ 
<Proxy balancer://mycluster>; 
  BalancerMember ajp://localhost:9001/ route=NodeA1000 retry=10 
  BalancerMember ajp://localhost:9002/ route=NodeB1000 retry=10 
</Proxy> 
4b9b3361

Ответ 1

Для apache httpd, чтобы ваши сессии были привязаны к одному и тому же серверу, ему необходимо знать, какой файл cookie хранит идентификатор сеанса. Для java это (обычно) JSESSIONID.

Если вы используете директиву ProxyPass, используйте

ProxyPass /example http://backend.example.com stickysession=JSESSIONID

В отличная документация apache httpd.

Ответ 2

Это сработало для меня...

Вместо использования stickysession = JSESSIONID в директиве ProxyPass он должен быть установлен в настройке балансировки с использованием ProxySet stickysession = JSESSIONID:

<Proxy balancer://mybalancer>
BalancerMember ajp://server1:8009 route=tomcat1
BalancerMember ajp://server2:8009 route=tomcat2
ProxySet lbmethod=bytraffic
ProxySet stickysession=JSESSIONID
</Proxy>
ProxyPass /myapp/ mybalancer://myapp/

Он был не работает для меня, когда я использовал его в ProxyPass, как показано ниже:

ProxyPass /myapp/ mybalancer://myapp/ stickysession=JSESSIONID

Это должно быть добавлено к документам apache, потому что это так больно решить.

Ответ 3

Попробуйте это, я уверен, что это сработает для вас.

Шаг-1: добавьте ниже код в httpd.conf:

<Proxy balancer://mycluster>
BalancerMember http://<NODE1>/<APP>/  route=jvm1 
BalancerMember http://<NODE2>/<APP>/  route=jvm2
ProxySet lbmethod=bytraffic
ProxySet stickysession=JSESSIONID
</Proxy>

ProxyPass /<APP>/ balancer://mycluster/ 
ProxyPassReverse /<APP>/ balancer://mycluster/

Шаг-2: добавьте ниже код в server.conf:

a) <NODE1>
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">    
b) <NODE2>
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">

Ответ 4

Это проблема, с которой я столкнулся - если вы определяете свой балансир в пределах vhost, то, похоже, он использует stickysession как задокументированный. Однако, если вы определяете балансировку за пределами vhost, в которой она используется, тогда лизание теряется, поэтому вы должны установить его с помощью ProxySet внутри самого балансира.

Ответ 5

Я думаю, ваша проблема в том, что вы используете mybalancer, где вы используете балансировку:

ProxyPass /myapp/ balancer://mybalancer/ stickysession=JSESSIONID