{{tag>réseau internet serveur tutoriel VÉTUSTE}} ---- ====== Comment coupler Apache2 avec un serveur d'application Tomcat (avec support SSL) ? ====== ===== Introduction ===== Le conteneur de servlet [[:Tomcat]] est très pratique pour des projets J2EE d'envergure moyenne. Il est relativement simple à installer et à administrer. Un serveur Tomcat sert les requêtes (HTTP) par défaut sur un port différent des ports standards destinés au web. Ces requêtes sont servies par le biais d'un petit moteur HTTP simpliste nommé //Coyote//. Bien que parfaitement adapté à des situations de développement, ce moteur HTTP est moins robuste qu'Apache pour la montée en charge et la gestion des caches. De plus, ce moteur //Coyote// ne prend pas en charge le SSL nativement. Afin de pallier les inconvénients du moteur //Coyote//, bon nombre de sites de production utilisant Tomcat se sont naturellement tournés vers Apache. Le but de ce document est d'expliquer comment coupler Apache 2 et le serveur d'application Tomcat avec le support SSL assuré par Apache 2. ===== Pré-requis ===== En rédigeant cette documentation, je pars des principes suivants : - Vous avez une machine fonctionnelle et à jour sous [[:Xenial]]. - Vous avez un [[:Tomcat]] installé et fonctionnel sur son port par défaut. - Vous avez un certificat SSL disponible dans ''/etc/ssl''. ([[tutoriel:comment_creer_un_certificat_ssl|une page expliquant la marche à suivre existe dans le wiki]]) - Votre FAI ne bloque pas le port 80, si votre FAI le bloque suivez [[:fai_bloque_port_80|ce tutoriel]] après l'installation d'apache2. ===== Installation et configuration ===== ==== Installation d'Apache 2 et du module mod_JK==== Tout d'abord, nous installons dans le serveur Apache 2, le connecteur "JK" destiné à faire le lien avec Tomcat et le "multi-processing module prefork" préférable pour les machines .NIX //This Multi-Processing Module (MPM) implements a non-threaded, pre-forking web server that handles requests in a manner similar to Apache 1.3// Pour cela nous installons les paquet ''apache2-mpm-prefork'' et ''libapache2-mod-jk'' : sudo apt-get install apache2-mpm-prefork libapache2-mod-jk Notes : * la documentation sur les différents "mpm" du serveur apache2 est ici :[[http://httpd.apache.org/docs/2.0/mpm.html]] * la documentation sur le module "mod_jk" est ici : [[http://httpd.apache.org/docs/2.0/mod/mod_proxy.html]] * Les directives du module mod_jk sont décrite ici : [[https://tomcat.apache.org/connectors-doc/reference/apache.html]] Pour créer les règles de redirection il faut utiliser la directive JKMount dans le fichier décrivant le VirtualHost "*:80" à savoir :"/etc/apache2/sites-enabled/000-default" ServerAdmin webmaster@localhost DocumentRoot /var/www/ ... JkMount /contextA/* ajp13_worker JkMount /contextB/jsps/*.jsp ajp13_worker Ici, contextA et contextB correspondent aux applications web déployées sur tomcat. Notes : * ajp13_worker est le nom du worker défini par défaut dans le fichier "/etc/libapache2-mod-jk/workers.properties" * Pour changer le nom du worker, vous pouvez modifier ce fichier ou bien indiquer à apache d'en charger un autre en modifiant la propriété JkWorkersFile du fichier "/etc/apache2/mods-available/jk.conf" ==== Configuration du lien avec Tomcat ==== Pour activer le connecteur ajp, il faut modifier le fichier /etc/tomcat8/server.xml Cherchez le bloc de code suivant : Et décommentez-le : Puis redémarrez le serveur Tomcat : sudo service tomcat8 restart A partir d'ici, vous devez pouvoir vous connecter sur le serveur Tomcat via le port 80 (et via Apache). ==== Activation du SSL ==== Dans le fichier ''/etc/apache2/ports.conf'', veillez à ce que le contenu soit comme suit : Listen 80 Listen 443 Ajoutez les chargements des modules SSL dans Apache en ajoutant les liens symboliques pour ''ssl.conf'' et ''ssl.load'' par le biais de la commande suivante : sudo a2enmod ssl Ajoutez un site se chargeant des requêtes SSL en créant le fichier ''/etc/apache2/sites-available/mySite.https'' avec les données suivantes : ServerAdmin admin@brol.com ServerName machin.brol.com:443 ErrorLog /var/log/apache2/error.log LogLevel warn CustomLog /var/log/apache2/access.log combined ServerSignature On SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP SSLCertificateFile /etc/ssl/server.crt SSLCertificateKeyFile /etc/ssl/server.key SSLCACertificatePath /etc/ssl SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 Assurez-vous que les certificats SSL se trouvent bien dans ''/etc/ssl''. Activez votre nouveau site : sudo ln -s /etc/apache2/sites-available/mySite.https /etc/apache2/sites-enabled/001-https Redémarrez le serveur Apache. sudo /etc/init.d/apache2 restart ---- // Contributeur : [[utilisateurs:ostaquet]], [[utilisateurs:charlycoste]] //