Configurer un serveur web apache
- Connecteur Apache HTTPD / Tomcat : AJP
- Activer le mode https (SSL)
- Équilibrage de charge (Basculement actif / actif [Loadbalancing])
Connecteur Apache HTTPD / Tomcat : AJP
Prérequis
- Avoir apache httpd installé
- Avoir les modules proxy et proxy_ajp activés
Ajout d'un module dans apache httpd
Windows
- Vérifiez que le fichier correspondant au module est présent dans le dossier <install_apache>/modules. Par exemple pour le module proxy_ajp : fichier mod_proxy_ajp.so. Si ce n’est pas le cas, trouvez une version d’apache httpd contenant ce fichier.
- Activez le module dans le fichier <install_apache>/conf/httpd.conf avec :
LoadModule nom_du_module modules/fichier_du_module
Exemple : LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
Linux
Utilisez la commande : a2enmod nom_du_module
Exemple : a2enmod proxy_ajp
Si cette commande échoue ou n’existe pas, suivez les mêmes étapes que pour Windows.
Configuration du routage apache httpd vers tomcat
Apache Tomcat
Du côté de Apache Tomcat, dans le fichier de configuration <install_tomcat>/conf/server.xml ajoutez ou vérifiez que le connecteur ajp existe :
Apache HTTPD
Du côté de Apache httpd, dans le fichier de votre hôte virtuel (virtual host), ajoutez la directive ProxyPass pour que httpd se connecte au connecteur AJP Tomcat :
<VirtualHost *:80>
ServerAdmin support@digdash.com
ServerName monserveur.digdash.com
DocumentRoot /var/www
ProxyPass / ajp://montomcat.digdash.com:8009/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Require all granted
</Directory>
ErrorLog logs/error_apache.log
LogLevel warn
CustomLog logs/access_apache.log combined
</VirtualHost>
Timeout
Il peut être nécessaire de spécifier une valeur de timeout sur le connecteur AJP plus importante que celle par défaut (60 secondes).
Certaines procédures qui dépassent la minute de calcul (exports, fabriques, sauvegarde/restauration…) peuvent alors être interrompues par Apache httpd, qui renvoie une erreur HTTP 500 au client.
Pour modifier cette valeur vous pouvez ajouter le paramètre timeout=<secondes> au niveau du ProxyPass, par exemple :
ProxyPass / ajp://montomcat.digdash.com:8009/ timeout=300
Alternative : Configuration du routage apache httpd vers tomcat avec changement du nom de répertoire
Objectif
Se connecter avec une URL comportant un répertoire parent différent.
Dans cet exemple nous allons prendre le répertoire domaine_securite1/ et donc accéder à la page d’accueil avec cette URL : http://machine/domaine_securite1/adminconsole.
Apache Tomcat
Même configuration que Configuration du routage apache httpd vers tomcat.
Apache HTTPD
Du côté de Apache HTTPD, dans le fichier de votre hôte virtuel (virtual host), ajoutez les directives ProxyPass, ProxyPassReverse et ProxyPassReverseCookiePath vers votre connecteur AJP Tomcat :
<VirtualHost *:80>
ServerAdmin support@digdash.com
ServerName srvapache
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Require all granted
</Directory>
ProxyPass "/domaine_securite1" "ajp://srvtomcat:8009"
ProxyPassReverseCookiePath "/" "/domaine_securite1"
ProxyPassReverse "/domaine_securite1" "http://srvapache"
ErrorLog logs/error_apache.log
LogLevel warn
CustomLog logs/access_apache.log combined
</VirtualHost>
Activer le mode https (SSL)
Prérequis
- Posséder un certificat valide pour son réseau ou un certificat approuvé par une autorité tierce reconnue par les navigateurs par défaut. (ex : Comodo, Globalsign, Thawte, Verisign…)
- Avoir une version de Apache httpd récente avec les derniers patchs de sécurité concernant ssl
- Vérifier que le module ssl est activé (voir Ajouter un module dans apache httpd)
- Avoir compris la mise en oeuvre décrite dans Connecteur Apache HTTPD / Tomcat : AJP
Configuration
Ajoutez une directive Listen pour que httpd écoute le port 443 :
<install_apache>/conf/httpd.conf :
Listen 443
Ensuite changez le port utilisé, activez le ssl et configurez le certificat et la clé utilisés :
<VirtualHost *:443>
ServerAdmin support@digdash.com
ServerName monserveur.digdash.com
SSLEngine on
SSLCertificateKeyFile /etc/ssl/maclef.key
SSLCertificateFile /etc/ssl/moncertif.crt
SSLCertificateChainFile /etc/ssl/certif.ca-bundle
DocumentRoot /var/www
ProxyPass / ajp://montomcat.digdash.com:8009/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Require all granted
</Directory>
ErrorLog logs/error_apache.log
LogLevel warn
CustomLog logs/access_apache.log combined
</VirtualHost>
SSLPassphraseDialog
Si votre clé privée est cryptée, il faudra spécifier le mot de passe au démarrage de httpd ou utiliser la directive SSLPassPhraseDialog.
Pour utiliser la directive sans devoir saisir le mot de passe il faut créer un fichier script qui affiche le mot de passe requis (sur stdout). Par exemple :
motdepasse.sh :
echo motdepasse
httpd.conf :
SSLPassPhraseDialog "exec:/chemin/vers/motdepasse.sh"
</IfModule>
Équilibrage de charge (Basculement actif / actif [Loadbalancing])
Chaque session utilisateur est attribuée à un seul serveur tomcat (sticky session). Si un serveur tomcat tombe, l’utilisateur devra s’authentifier à nouveau sur le serveur actif où sa session sera ré-affectée (en cas de SSO ceci est transparent).
Prérequis
- Vérifier que le module proxy_balancer est activé (voir Ajouter un module dans apache httpd)
- Avoir compris la mise en oeuvre décrite dans Connecteur Apache HTTPD / Tomcat : AJP
Configuration
Apache Tomcat
Du côté de Apache Tomcat, dans le fichier de configuration <install_tomcat>/conf/server.xml, ajoutez ou vérifiez que le connecteur AJP existe :
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
Ajoutez ou vérifiez que la balise engine possède un attribut jvmRoute avec un identifiant unique sur chaque machine cible :
<Engine name="Catalina" defaultHost="localhost" jvmRoute="m1">
Apache HTTPD
Du côté de apache httpd, dans le fichier de votre hôte virtuel (virtual host) :
<VirtualHost lap-sus:80>
ServerAdmin support@digdash.com
DocumentRoot "C:/htdocs"
ServerName monserveur.digdash.com
<Proxy balancer://monserveur.digdash.com>
BalancerMember ajp://montomcat1.digdash.com:8009 route=m1
BalancerMember ajp://montomcat2.digdash.com:8009 route=m2
ProxySet stickysession=JSESSIONID
</Proxy>
ProxyPass / "balancer://monserveur.digdash.com/" stickysession=JSESSIONID
scolonpathdelim=On
<Directory />
Options FollowSymLinks
AllowOverride None
Require all granted
ProxyPassReverse balancer://monserveur.digdash.com/
</Directory>
ErrorLog logs/error_apache.log
LogLevel warn
CustomLog logs/acces_apache.log combined
</VirtualHost>