it-swarm.com.de

dauerhafte Sitzung mit Apache-Webserver und Tomcat-Servern

Ich verwende den Apache-Webserver als Load Balancer für zwei Tomcat-Instanzen hinter Apache. Wenn die erste Anforderung an Knoten A geht und die zweite Anforderung von demselben Client an Knoten B geht, kann ich nicht auf Sitzungsvariablen in Knoten A zugreifen. Ich surfte im Internet und stellte fest, dass es hilfreich sein würde, ständige Sitzungen zu ermöglichen. Aber alle Tutorials zur Aktivierung der Sticky-Sitzungen in Apache sehen verwirrend aus. Gibt es dafür ein einfaches Schritt-für-Schritt-Tutorial? Bitte helfen.

Code-Fragment aus Kommentar:

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> 
17
ihavprobs

Damit Apache httpd Ihre Sitzungen an dasselbe Backend gebunden hält, muss er wissen, welcher Cookie die Sitzungs-ID enthält. Für Java ist dies normalerweise JSESSIONID.

Wenn Sie die Direktive ProxyPass verwenden, verwenden Sie

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

In der ausgezeichneten Apache httpd-Dokumentation zu finden.

11
Joeri Hendrickx

Das hat für mich funktioniert ...

Statt stickysession = JSESSIONID in der ProxyPass-Direktive zu verwenden, muss dies in der Balancer-Konfiguration mit ProxySet festgelegt werden. 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/

Es funktionierte funktionierte nicht für mich, als ich es in ProxyPass verwendete (siehe unten):

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

Dies sollte zu Apache-Dokumenten hinzugefügt werden, da es so schwer zu lösen ist.

15
Radoslav Lang

Bitte versuchen Sie es, ich bin sicher, dass dies für Sie funktionieren wird.

Schritt 1: Fügen Sie den folgenden Code in httpd.conf hinzu:

<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/

Schritt 2: Fügen Sie folgenden Code in der server.conf hinzu:

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

Dies ist ein Problem, dem ich auch begegnet bin - wenn Sie Ihren Balancer innerhalb eines vhost definieren, scheint er die Stickysession als dokumentiert zu verwenden. Wenn Sie jedoch einen Balancer außerhalb des vhost definieren, in dem er verwendet wird, geht die Stickysession verloren, sodass Sie ihn mit ProxySet im Balancer selbst festlegen müssen.

2
Wilb

Ich denke, Ihr Problem ist, dass Sie mybalancer verwenden, wenn Sie Balancer verwenden:

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