Tomcat 05 Serveur Web Frontal

Serveur Web frontal

1. Rôle d’un serveur Web frontal

  • Le securité : Le serveur Web frontal sert de bastion pour toute requête entrante et isole la JVM de l’Internet.
  • La performance : Chacun des deux serveurs remplit pleinement son rôle : servir les pages et les calculer sont deux choses différentes. Le serveur applicatif est d’autant plus proche des sources de données.
  • Evolutivité : Un serveur Web frontal permet l’évolutivité verticale / horizontale.
  • Fonctionnalité : Il ajoute des fonctionnalités de chiffrement, de réécriture, de pare-feu applicatif, de protection de type OWASP, etc.

2. Protocole Apache JServ (AJP)

Le protocole Apache JServ (AJP) est un protocole binaire qui permet de rediriger les connexions entrantes d’un serveur web vers un serveur d’applications qui se trouve derrière celui-ci.

AJP permet aussi de vérifier que le serveur web peut contacter le serveur d’applications au moyen d’un “ping”.

Les administrateurs utilisent souvent AJP comme un répartiteur de charge où un ou plusieurs serveurs web renvoient les requêtes vers un ou plusieurs serveurs d’applications. Les sessions sont redirigées vers le bon serveur d’applications en utilisant un mécanisme où chaque serveur d’applications se voit attribuer un nom (appelé une route).

AJP peut être utilisé sur le serveur web Apache 1.x (version dépassée) en utilisant le module mod_jk.

Dans Apache 2.2, on combine le mandataire AJP mod_proxy_ajp, mod_proxy et des modules de répartition de charge.

Alors que le serveur Apache est écrit en C, le serveur d’applications est généralement écrit en Java. Apache Tomcat et Jetty prennent tous deux AJP en charge. Le serveur d’applications WebObjects peut utiliser AJP sans déployer de servlet en utilisant LEWOAJPAdaptor de LEWOStuff.

Le serveur web communique avec le conteneur de servlets au moyen de connexions TCP. La même connexion est réutilisée pour plusieurs requêtes et réponses successives, mais une même connexion ne peut pas traiter plusieurs requêtes simultanées. L’en-tête HTTP est envoyé sous forme condensée, et s’il y a un corps à la requête HTTP (content-length > 0), il est envoyé dans un paquet séparé.

3. Connecteurs et modules AJP

Connecteur Tomcat

Fichier server.xml.

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Host ...>
				...
      </Host>
    </Engine>
  </Service>
</Server>

Module Apache mod_proxy_ajp

Module pour Apache HTTPd Server 2.4. Ce module nécessite le chargement de mod_proxy. Il fournit le support du Protocole Apache JServ version 1.3 (AJP).

Ce module permet de mandater en inverse un serveur d’application d’arrière-plan (comme Apache Tomcat) qui utilise le protocole AJP. Son utilisation est similaire à celle d’un mandataire inverse HTTP, mais s’appuie sur le prefixe ajp:// :

Mandataire inverse simple

ProxyPass "/app" "ajp://backend.example.com:8009/app"

On peut aussi configurer un répartiteur de charge :

Mandataire inverse avec répartiteur de charge

<Proxy balancer://cluster>
    BalancerMember "ajp://app1.example.com:8009" loadfactor=1
    BalancerMember "ajp://app2.example.com:8009" loadfactor=2
    ProxySet lbmethod=bytraffic
</Proxy>
ProxyPass "/app" "balancer://cluster/app"

Source : Module Apache mod_proxy_ajp

4. Configuration du serveur Web Apache HTTPd

Exercice

Veuillez placer un serveur HTTPD nommé httpd-1 devant votre serveur tomcat-1.

Celui-ci doit être configué avec un VirtualHost tomcat.examples.com qui met en proxy les pages http://tomcat.examples.com/examples vers ajp://tomcat-1:8009/examples, soit via le protocole AJP.

Veuillez vérifier et utiliser une résolution de nom fonctionnelle.

Le test de vérification est le suivant (sur httpd-1) à fournir :

ss -antp | grep 80
httpd -D DUMP_VHOSTS
curl http://tomcat-1:8080/examples/index.html
curl http://tomcat.examples.com/examples/index.html

Il s’agit de vérifier :

  • Les ports et connexion établie par HTTPD
  • De vérifier l’existence d’un VirtualHost
  • De vérifier les pages originales
  • De vérifier les pages mise en Proxy

Références pour aide

How to set up Apache webserver proxy in front of Apache Tomcat on Red Hat Linux

https://tecadmin.net/setup-apache-as-reverse-proxy-for-tomcat/

Setting up a reverse proxy to a Tomcat server

Exercice supplémentaire

Répartir la charge sur deux serveurs Tomcat avec une application identique à partir d’un seul proxy HTTPD, en dupliquant et en adaptant tomcat-1 en tomcat-2.

5. Clustering Tomcat

Load Balancer How-To

Cluster How-To