Modifié par jhurst le 2024/04/02 14:25

Afficher les derniers auteurs
1 {{ddtoc/}}
2
3 ----
4
5 = Connecteur Apache HTTPD / Tomcat : AJP =
6
7 == {{id name="prérequis"/}}Prérequis ==
8
9 * Avoir apache httpd installé
10 * Avoir les modules **proxy** et **proxy_ajp** activés
11
12 == {{id name="module"/}}Ajout d'un module dans apache httpd ==
13
14 === {{id name="windows"/}}Windows ===
15
16 1. 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.
17 1. Activez le module dans le fichier **<install_apache>/conf/httpd.conf** avec :
18 LoadModule nom_du_module modules/fichier_du_module
19 Exemple : LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
20
21 === {{id name="linux"/}}Linux ===
22
23 Utilisez la commande : a2enmod nom_du_module
24 __Exemple :__ a2enmod proxy_ajp
25 Si cette commande échoue ou n’existe pas, suivez les mêmes étapes que pour Windows.
26
27 == {{id name="configuration-du-routage-apache-httpd-vers-tomcat"/}}Configuration du routage apache httpd vers tomcat ==
28
29 === {{id name="tomcat-conf"/}}Apache Tomcat ===
30
31 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 :
32
33 {{code language="xml"}}
34 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
35 {{/code}}
36
37 (% class="box infomessage" %)
38 (((
39 Le redirectPort est utilisé pour les requêtes ayant une contrainte de sécurité obligeant un transport en SSL
40 )))
41
42 (% class="box warningmessage" %)
43 (((
44 Pensez à relancer Tomcat après une modification du fichier server.xml
45 )))
46
47 === {{id name="apache-httpd"/}}Apache HTTPD ===
48
49 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 :
50
51 (% class="box" %)
52 (((
53 <VirtualHost *:80> 
54 ServerAdmin support@digdash.com 
55 ServerName monserveur.digdash.com 
56 DocumentRoot /var/www 
57 ProxyPass / ajp:~/~/montomcat.digdash.com:8009/
58 <Directory /> 
59 Options FollowSymLinks
60 AllowOverride None
61 </Directory>
62 <Directory /var/www>
63 Options Indexes FollowSymLinks MultiViews
64 AllowOverride None
65 Require all granted
66 </Directory>
67 ErrorLog logs/error_apache.log
68 LogLevel warn
69 CustomLog logs/access_apache.log combined
70 </VirtualHost>
71 )))
72
73 (% class="box warningmessage" %)
74 (((
75 Attention : N’oubliez pas de relancer apache httpd après une modification des fichiers de configuration.
76 )))
77
78 ==== {{id name="timeout"/}}Timeout ====
79
80 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).
81
82 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.
83
84 Pour modifier cette valeur vous pouvez ajouter le paramètre **timeout=<secondes>** au niveau du ProxyPass, par exemple :
85
86 ProxyPass / ajp:~/~/montomcat.digdash.com:8009/ timeout=300
87
88 == {{id name="alternative-configuration-du-routage-apache-httpd-vers-tomcat-avec-changement-du-nom-de-répertoire"/}}Alternative : Configuration du routage apache httpd vers tomcat avec changement du nom de répertoire ==
89
90 === {{id name="objectif"/}}Objectif ===
91
92 Se connecter avec une URL comportant un répertoire parent différent.
93 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.
94
95 === {{id name="apache-tomcat"/}}Apache Tomcat ===
96
97 Même configuration que [[Configuration du routage apache httpd vers tomcat>>path:#tomcat-conf]].
98
99 === {{id name="apache-httpd-1"/}}Apache HTTPD ===
100
101 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 :
102
103 (% class="box" %)
104 (((
105 <VirtualHost *:80>
106 ServerAdmin support@digdash.com
107 ServerName srvapache
108 DocumentRoot /var/www
109 <Directory />
110 Options FollowSymLinks
111 AllowOverride None
112 </Directory>
113 <Directory /var/www/>
114 Options Indexes FollowSymLinks MultiViews
115 AllowOverride None
116 Require all granted
117 </Directory>
118 ProxyPass "/domaine_securite1" "ajp:~/~/srvtomcat:8009"
119 ProxyPassReverseCookiePath  "/" "/domaine_securite1"
120 ProxyPassReverse "/domaine_securite1" "http:~/~/srvapache"
121 ErrorLog logs/error_apache.log
122 LogLevel warn
123 CustomLog logs/access_apache.log combined
124 </VirtualHost>
125 )))
126
127 = {{id name="activer-le-mode-https-ssl"/}}Activer le mode https (SSL) =
128
129 == {{id name="prérequis-1"/}}Prérequis ==
130
131 * 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…)
132 * Avoir une version de Apache httpd récente avec les derniers patchs de sécurité concernant ssl
133 * Vérifier que le module ssl est activé (voir [[Ajouter un module dans apache httpd>>path:#module]])
134 * Avoir compris la mise en oeuvre décrite dans [[Connecteur Apache HTTPD / Tomcat : AJP>>path:#main]]
135
136 == {{id name="configuration"/}}Configuration ==
137
138 Ajoutez une directive **Listen** pour que httpd écoute le port 443 :
139 **<install_apache>/conf/httpd.conf** :
140 Listen 443
141
142 Ensuite changez le port utilisé, activez le ssl et configurez le certificat et la clé utilisés :
143
144 (% class="box" %)
145 (((
146 <VirtualHost *:443>
147 ServerAdmin support@digdash.com
148 ServerName monserveur.digdash.com
149 SSLEngine on
150 SSLCertificateKeyFile /etc/ssl/maclef.key
151 SSLCertificateFile /etc/ssl/moncertif.crt
152 SSLCertificateChainFile /etc/ssl/certif.ca-bundle
153 DocumentRoot /var/www
154 ProxyPass / ajp:~/~/montomcat.digdash.com:8009/
155 <Directory />
156 Options FollowSymLinks
157 AllowOverride None
158 </Directory>
159 <Directory /var/www/>
160 Options Indexes FollowSymLinks MultiViews
161 AllowOverride None
162 Require all granted
163 </Directory>
164 ErrorLog logs/error_apache.log
165 LogLevel warn
166 CustomLog logs/access_apache.log combined
167 </VirtualHost>
168 )))
169
170 === {{id name="sslpassphrasedialog"/}}SSLPassphraseDialog ===
171
172 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>>url:https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslpassphrasedialog]].
173
174 (% class="box warningmessage" %)
175 (((
176 **Attention** : Cette directive n’est pas supportée sous **Windows**. Il faudra l’enlever du fichier de configuration et il vous faudra remplacer votre clé privée par une clé non cryptée. Pour remplacer la clé, il suffit de décrypter la clé privée existante et d'exporter la clé non cryptée vers un fichier (avec openssl rsa -in clé_cryptée -out clé_noncryptée par exemple).
177 )))
178
179 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 :
180
181 **motdepasse.sh** :
182
183 {{code language="sh"}}
184 #!/bin/bash
185 echo motdepasse
186 {{/code}}
187
188 **httpd.conf** :
189
190 {{code language="xml"}}
191 <IfModule ssl_module>
192 SSLPassPhraseDialog "exec:/chemin/vers/motdepasse.sh"
193 </IfModule>
194 {{/code}}
195
196 = {{id name="équilibrage-de-charge-basculement-actif-actif-loadbalancing"/}}Équilibrage de charge (Basculement actif / actif [Loadbalancing]) =
197
198 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).
199
200 == {{id name="prérequis-2"/}}Prérequis ==
201
202 * Vérifier que le module **proxy_balancer** est activé (voir [[Ajouter un module dans apache httpd>>path:#module]])
203 * Avoir compris la mise en oeuvre décrite dans [[Connecteur Apache HTTPD / Tomcat : AJP>>path:#main]]
204
205 == {{id name="configuration-1"/}}Configuration ==
206
207 === {{id name="apache-tomcat-1"/}}Apache Tomcat ===
208
209 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 :
210 {{code language="xml"}}<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>{{/code}}
211
212 Ajoutez ou vérifiez que la balise **engine** possède un attribut **jvmRoute** avec un identifiant unique sur chaque machine cible :
213 {{code language="xml"}}<Engine name="Catalina" defaultHost="localhost" jvmRoute="m1">{{/code}}
214
215 === {{id name="apache-httpd-2"/}}Apache HTTPD ===
216
217 Du côté de apache httpd, dans le fichier de votre hôte virtuel (virtual host) :
218
219 (% class="box" %)
220 (((
221 <VirtualHost lap-sus:80>
222 ServerAdmin support@digdash.com
223 DocumentRoot "C:/htdocs"
224 ServerName monserveur.digdash.com
225 )))
226
227 (% class="box" %)
228 (((
229 <Proxy balancer:~/~/monserveur.digdash.com>
230 BalancerMember ajp:~/~/montomcat1.digdash.com:8009 route=m1
231 BalancerMember ajp:~/~/montomcat2.digdash.com:8009 route=m2
232 ProxySet stickysession=JSESSIONID
233 </Proxy>
234 )))
235
236 (% class="box" %)
237 (((
238 ProxyPass / "balancer:~/~/monserveur.digdash.com/" stickysession=JSESSIONID
239 scolonpathdelim=On
240 <Directory />
241 Options FollowSymLinks
242 AllowOverride None
243 Require all granted
244 ProxyPassReverse balancer:~/~/monserveur.digdash.com/
245 </Directory>
246 )))
247
248 (% class="box" %)
249 (((
250 ErrorLog logs/error_apache.log
251 LogLevel warn
252 CustomLog logs/acces_apache.log combined
253 </VirtualHost>
254 )))