Rediriger le port 8080 de Tomcat vers le port 80 d’Apache 2 avec un sous-domaine

Logo Apache TomcatConsidérons que nous avons un serveur sous Apache 2 et un serveur sous Tomcat 6 sur une plateforme Debian! Sur cette plateforme, nous souhaiterions que notre application web Tomcat disponible à l’adresse http://monDomain.com:8080/maWebApp soit disponible à l’adresse http://maSubDomainWebApp.monDomain.com (sur le port 80). Il existe différentes stratégies pour faire ceci, nous allons pour cela utiliser le Connector AJP et le mod_proxy (et non pas mod_jk qui est vieillissant). Nous verrons dans un prochaine article comment rendre disponible notre application sur un port sécurisé SSL 443 à l’adresse https://maSubDomainWebApp.monDomain.com (Le web tout sécurisé est certainement l’avenir de notre monde…)

Configurer Tomcat

Nous allons mettre en place le Connector AJP sur le serveur Tomcat. Il nous permet une installation Tomcat dans une installation Apache HTTP Server.
Dans le fichier de configuration de Tomcat server.xml, vous devez déclarer le Connector AJP comme suit, entre les balises <Service name= »Catalina »>, ou équivalente, qui devraient déjà exister.

<!-- A "Service" is a collection of one or more "Connectors" that share a single "Container" Note:  A "Service" is not itself a "Container", so you may not define subcomponents such as "Valves" at this level. Documentation at /docs/config/service.html -->
 
    ...
    <!-- Define an AJP 1.3 Connector on port 8009 -->
 
    ...
  &lt;/Service name="Catalina"&gt;

N’oubliez pas de redémarrer le service de Tomcat après cette modification. Usuellement sous Debian, cette opération se fait ainsi.sudo /etc/init.d/tomcat restart

Mise en place de la configuration de base d’Apache

Nous allons ici mettre en place les modules permettant à Apache d’être relier au serveur Tomcat. Ceci se fait au travers de trois modules mod_proxy, mod_rewrite et mod_proxy_ajp, que vous devez activer par la commande suivante:
sudo a2enmod proxy proxy_ajp rewrite
Ces deux modules là ne seront peut-être pas présents dans votre système, téléchargez les via le fameux apt-get.

Rediriger le port 8080 vers un sous domaine du port 80

Maintenant qu’Apache et Tomcat sont capables de communiquer ensemble, nous allons les faire dialoguer. Nous allons rediriger l’application web http://monDomain.com:8080/maWebApp vers http://maSubDomainWebApp.monDomain.com.

Créez un nouveau fichier pour définir votre sous domaine maSubDomainWebApp.monDomain.com
sudo vim /etc/apache2/sites-available/maSubDomainWebApp.monDomain.comet insérez la configuration suivante

    ServerName  maSubDomainWebApp.monDomain.com
 
    # here comes the proxy details!!!
    ProxyRequests Off
 
       Order deny,allow
       #The Tomcat server IP address
       Allow from localhost
 
 
    ProxyPass / ajp://localhost:8009/maWebApp
    ProxyPassReverse / http://maSubDomainWebApp.monDomain.com/maWebApp

Ensuite, activez ce sous domaine auprès d’Apache via la commande:
sudo a2ensite maSubDomainWebApp.monDomain.com

Cette technique pose problème avec des applications basées sur le framework Struts 2 et certainement d’autres. En effet, le chemin relatifs des pages JSP sont souvent référencées par http://maSubDomainWebApp.monDomain.com/maWebApp. Spécifiquement pour ces frameworks, j’étudie les possibilitées de RewriteEngine (c’est pour cette raison que je vous propose de l’activer). je posterai une mise à jour… des que j’aurai une solution solide!

La sécurité

Vous avez noté que notre proxy n’autorise que les requêtes de localhost pour Apache. Néanmoins, il faudrait sécuriser le serveur Tomcat en sécurisant les ports 8080 et 8009 avec iptable (le plus facile) ou configurer le serveur en lui-même avec server.xml.

A lire: