Prérequis : Apache > version 2.4.10 sur plateforme unix, linux et windows implémente un mode reverse proxy pour les websockets.

 

configuration dans httpd.conf d'un serveur apache  www.domain.com (en écoute sur le port 80) en frontal de deux tomcats remotehost1 et remotehost2 (en écoute sur le port 88) pour les requêtes en reverse proxy

Le loadbalancer est configuré pour l'application myapp

Les deux noeuds du cluster seront différenciés par leur nom node1 et node2.  Ces noms utilisés dans le fichier httpd.conf doivent être respectivement configurés lors du lancement de la jvm sur remotehost1 et remotehost2

LoadModule headers_module modules/mod_headers.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so 
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
...
 
ProxyRequests Off   
ServerName www.domain.comr:80 
DocumentRoot "d:/Apache24/htdocs"


BalancerInherit Off
<Proxy balancer://wscluster>
    BalancerMember ws://remotehost1.domain.com:88  route=node1 retry=1 keepalive=On ttl=120 
    BalancerMember ws://remotehost2.domain.com:88  route=node2 retry=1 keepalive=On ttl=120
    ProxySet nofailover=Off
</Proxy>
<Proxy balancer://httpcluster>
    BalancerMember http://remotehost2.domain.com:88 route=node1 retry=1 keepalive=On 
    BalancerMember http://remotehost2.domain.com:88 route=node2 retry=1 keepalive=On
    ProxySet nofailover=Off
</Proxy>
ProxyPass /myapp/WagonWS balancer://wscluster/myapp/WagonWS   stickysession=WagonNodeId stickysessionsep=Off
ProxyPassReverse /myapp/WagonWS balancer://wscluster/myapp/WagonWS  
ProxyPass /myapp/ balancer://httpcluster/myapp/ stickysession=WagonNodeId stickysessionsep=Off
ProxyPassReverse /myapp/ balancer://httpcluster/myapp/  

Remarque : dans la déclaration de la règle en reverse proxy sur la websocket WagonWS, l'url ne doit être se terminer par  /WagonWS,  en aucun cas il ne faut rajouter de / à la fin de l'URL.

configuration du listener tomcat en mode reverse proxy

  <Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" port="88" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true" scheme="http" proxyName="www.domain.com" proxyPort="80"/> 

configuration de tomcat en spécifiant le nom de cookie de session WagonNodeId à node1 sur remotehost1 et node2 remotehost2  au lancement de à l'aide de jvm à l'aide de la directive -DWagonNodeId=nodexxx

En linux ajouter (ou créer la variable JAVA_OPTS) dans setclasspath.sh

export JAVA_OPTS=-DWagonNodeId=node1  

En windows ajouter (ou créer la variable JAVA_OPTS)  dans setclasspath.bat ou ajoutez la directivement dans le service tomcat

set JAVA_OPTS=-DWagonNodeId=node1