web-dev-qa-db-fra.com

session collante avec le serveur Web Apache et les serveurs Tomcat

J'utilise un serveur Web Apache en tant qu'équilibreur de charge pour deux instances de Tomcat derrière Apache. Lorsque la première demande parvient au noeud A et que la deuxième demande du même client va au noeud B, je ne peux pas accéder aux variables de session à l'intérieur du noeud A. C'est évident. J'ai surfé sur Internet et j'ai constaté que permettre des sessions collantes aiderait. Mais tous les didacticiels permettant d'activer les sessions bloquées dans Apache semblent déroutants. Existe-t-il un tutoriel pas à pas simple pour cela? S'il vous plaît aider.

Fragment de code du commentaire:

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

Pour qu'Apache httpd conserve vos sessions liées au même backend, il doit savoir quel cookie conserve l'identifiant de session. Pour Java, il s’agit (généralement) de JSESSIONID.

Si vous utilisez la directive ProxyPass, utilisez

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

À retrouver dans l'excellente documentation Apache httpd .

11
Joeri Hendrickx

Cela a fonctionné pour moi ...

Au lieu d'utiliser stickysession = JSESSIONID dans la directive ProxyPass, il doit être défini dans la configuration de l'équilibreur à l'aide de 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/

C'était ne fonctionnait pas pour moi lorsque je l'utilisais dans ProxyPass comme indiqué ci-dessous:

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

Cela devrait être ajouté à la documentation Apache, car il est très difficile à résoudre.

15
Radoslav Lang

Pls essayez ceci, je suis sûr que cela fonctionnera pour vous.

Étape 1: Ajoutez le code ci-dessous dans 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/

Étape 2: Ajoutez le code ci-dessous dans server.conf:

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

C’est un problème que j’ai rencontré moi aussi. Si vous définissez votre équilibreur au sein d’un hôte, il semble utiliser la session stickys comme indiqué. Toutefois, si vous définissez un équilibreur en dehors du vhost et que son utilisation est utilisée, la session de stickysession est perdue. Vous devez donc le définir à l'aide de ProxySet dans l'équilibreur même.

2
Wilb

Je pense que votre problème est que vous utilisez mybalancer pour lequel vous devez utiliser l’équilibreur:

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