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