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>
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 .
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
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">
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.
Je pense que votre problème est que vous utilisez mybalancer pour lequel vous devez utiliser l’équilibreur:
ProxyPass /myapp/ balancer://mybalancer/ stickysession=JSESSIONID