Serveur Apache HTTP Version 2.5

En plus de ses fonctions de serveur web "basique", à savoir fournir du contenu statique et dynamique à l'utilisateur, Apache httpd (comme la plupart des autres serveurs web) peut aussi assurer les fonctions de serveur mandataire inverse, connu aussi sous le nom de serveur "passerelle".
Dans un tel scénario, httpd ne génère et n'héberge pas lui-même les données, le contenu étant en général obtenu à partir d'un ou plusieurs serveurs d'arrière-plan qui n'ont normalement aucune connexion directe avec le réseau externe. Lorsque httpd reçoit une requête en provenance d'un client, la requête proprement dite est mandatée vers un de ces serveurs d'arrière-plan qui traite la requête, génère le contenu et l'envoie à httpd, ce dernier générant la véritable réponse HTTP à destination du client.
De nombreuses raisons peuvent vous motiver à utiliser cette fonctionnalité, mais elles sont souvent du domaine de la sécurité, de la haute disponibilité, de la répartition de charge et de l'authentification/autorisation centralisée. Il est alors indispensable que l'organisation, la conception et l'architecture de l'infrastructure d'arrière-plan (les serveurs qui traitent au sens propre les requêtes) soient isolées et protégées de l'extérieur ; vu du client, le serveur mandataire inverse est le seul serveur accessible pouvant lui fournir du contenu.
Voici un exemple typique d'implémentation de cette fonctionnalité :

 Mandataire inverse
 Mandatement inverse simple
 Clusters et Balancers
 Configuration du Balancer et des BalancerMembers
 Gestion des indisponibilités (Failover)
 Gestion du répartiteur de charge
 Vérification dynamique du bon fonctionnement d'un serveur
    d'arrière-plan
 Drapeaux d'état d'un membre du groupe de répartition de charge| Modules Apparentés | Directives Apparentées | 
|---|---|
      La directive ProxyPass permet de
      rediriger les requêtes entrantes vers un serveur d'arrière-plan (ou un
      cluster de serveurs plus connu sous le nom de groupe
      Balancer). Dans cet exemple le plus simple, toutes les
      requêtes ("/") sont redirigées vers un serveur d'arrière-plan
      unique :
    
ProxyPass "/" "http://www.example.com/"
      Pour être sur que cette redirection soit effectuée et que les en-têtes
      Location: générés par le serveur d'arrière-plan soient
      modifiés pour pointer vers le mandataire inverse, et non vers le serveur
      d'arrière-plan, la directive ProxyPassReverse est souvent requise :
    
ProxyPass "/" "http://www.example.com/" ProxyPassReverse "/" "http://www.example.com/"
Seules des URIs spécifiques peuvent être mandatées, comme le montre l'exemple suivant :
ProxyPass "/images" "http://www.example.com/" ProxyPassReverse "/images" "http://www.example.com/"
Dans l'exemple précédent, si le chemin d'une requête commence par
    /images, elle sera redirigée vers le serveur d'arrière-plan
    spécifié ; dans le cas contraire, elle sera traitée localement.
    
      Utiliser un serveur d'arrière-plan unique n'est cependant pas une solution
      idéale car ce dernier peut devenir indisponible ou surchargé, et le
      mandatement inverse vers ce serveur ne présente alors plus aucun avantage.
      La solution réside dans la définition d'un groupe de serveurs
      d'arrière-plan qui vont se partager le traitement des requêtes via un
      mécanisme de répartition de charge et de gestion des indisponibilités pris
      en charge par le mandataire. Ce groupe de répartition est plus connu sous le nom de
      cluster, mais dans la terminologie d'Apache httpd, on utilise
      plutôt le terme de balancer. Un balancer se définit en
      utilisant les directives <Proxy> et BalancerMember comme suit :
    
<Proxy balancer://myset>
    BalancerMember http://www2.example.com:8080
    BalancerMember http://www3.example.com:8080
    ProxySet lbmethod=bytraffic
</Proxy>
ProxyPass "/images/"  "balancer://myset/"
ProxyPassReverse "/images/"  "balancer://myset/"
    
      Le protocole balancer:// indique à httpd que l'on souhaite
      créer un balancer nommé myset. Ce balancer comporte deux serveurs
      d'arrière-plan référencés dans la terminologie httpd sous le nom de
      BalancerMembers. Avec cet exemple, toute requête dont le chemin
      commence par /images sera mandatée vers un des deux
      serveurs d'arrière-plan. La directive ProxySet définit ici pour le balancer
      myset un algorithme de
      répartition de charge basé sur le trafic entrées/sorties.
    
Les BalancerMembers sont aussi souvent référencés sous le terme workers.
      Vous pouvez configurer de manière détaillée les balancers et
      workers via les nombreux paramètres de la directive ProxyPass. Par exemple, si vous souhaitez
      que http://www3.example.com:8080 traite avec un facteur 3 le
      trafic avec un timeout d'une seconde, utilisez la configuration suivante :
    
<Proxy balancer://myset>
    BalancerMember http://www2.example.com:8080
    BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1
    ProxySet lbmethod=bytraffic
</Proxy>
ProxyPass "/images"  "balancer://myset/"
ProxyPassReverse "/images"  "balancer://myset/"
  
      Vous pouvez aussi définir finement des scénarios pour les cas
      d'indisponibilité d'un ou plusieurs serveurs d'arrière-plan en spécifiant
      quels serveurs doivent alors prendre le relai. Dans l'exemple suivant,
      deux scénarios sont envisagés : dans le premier, seul
      http://hstandby.example.com:8080 se voit envoyer du trafic si
      tous les autres membres du balancer myset sont indisponibles.
      Dans le second, si http://hstandby.example.com:8080 est
      lui-même indisponible, http://bkup1.example.com:8080 et
      http://bkup2.example.com:8080 deviennent les deux seuls
      membres du groupe de répartition de charge actifs :
    
<Proxy balancer://myset>
    BalancerMember http://www2.example.com:8080
    BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1
    BalancerMember http://hstandby.example.com:8080 status=+H
    BalancerMember http://bkup1.example.com:8080 lbset=1
    BalancerMember http://bkup2.example.com:8080 lbset=1
    ProxySet lbmethod=byrequests
</Proxy>
ProxyPass "/images/"  "balancer://myset/"
ProxyPassReverse "/images/"  "balancer://myset/"
    
      Le point central de cet exemple de gestion des indisponibilités est la
      configuration du serveur d'arrière-plan
      http://hstandby.example.com:8080 avec le drapeau
      +H qui le place en mode hot standby, et
      l'inscription des deux serveurs bkup# dans le groupe de
      répartition de charge avec un niveau 1 (le niveau par défaut étant 0) ; en
      effet, les serveurs en mode hot standby, s'il existent, sont
      utilisés en premier en cas d'indisponibilité de tous les autres serveurs
      d'arrière-plan, et ce sont toujours les serveurs de niveau le plus bas qui
      sont utilisés en premier.
    
     L'application balancer-manager fournie avec le mandataire inverse
     d'Apache httpd en est un des outils les plus utiles. Comme
     mod_status, balancer-manager affiche la
     configuration et l'activité actuelles des balancers actifs. L'affichage de
     ces informations n'est cependant pas sa seule fonction ; il permet aussi de
     modifier la plupart d'entre elles et même d'ajouter des membres au groupe
     de répartition de charge en temps réel. Pour activer ces fonctionnalités,
     vous devez ajouter les lignes suivantes à votre fichier de configuration : 
    
<Location "/balancer-manager">
    SetHandler balancer-manager
    Require host localhost
</Location>
    N'activez le balancer-manager que si vous avez déjà sécurisé votre serveur. Assurez-vous en particulier que l'accès à l'URL soit fortement restreint.
      Lorsque vous accédez au serveur mandataire avec une adresse du style
      http://rproxy.example.com/balancer-manager/, la page suivante
      s'affiche :
    

Ce formulaire permet à l'administrateur de modifier certains paramètres, de désactiver ou d'ajouter certains serveurs d'arrière-plan, et de modifier les règles de répartition de charge. Par exemple, si on clique sur le répartiteur, la page suivante s'affiche :

Si on clique sur un membre du groupe de répartition de charge, la page suivante s'affiche :

      Si vous souhaitez que ces modifications soient conservées après un
      redémarrage du serveur, assurez-vous que la directive BalancerPersist soit définie à On.
    
      Avant que le mandataire httpd ne fasse appel à un serveur d'arrière-plan, il
      peut "tester" si ce dernier est disponible en définissant le
      paramètre ping de ce serveur via la directive ProxyPass. Cependant, il est souvent plus
      judicieux de vérifier le bon fonctionnement d'un serveur hors
      bande et de manière dynamique via le module
      mod_proxy_hcheck d'Apache httpd.
    
balancer-manager permet d'afficher et de modifier l'état d'un membre du groupe de répartition de charge. Les différents états et leurs significations sont les suivants :
| Drapeau | Sigle | Description | 
|---|---|---|
| Ok | Le serveur est disponible | |
| Init | Le serveur a été initialisé | |
D | Dis | Le serveur est désactivé et n'accepte aucune requête ; il sera retesté automatiquement. | 
S | Stop | Le serveur a été arrêté par l'administrateur ; il n'accepte aucune requête et il ne sera pas retesté automatiquement. | 
I | Ign | Les erreurs concernant ce serveur sont ignorées et il sera donc toujours considéré comme disponible. | 
H | Stby | Le serveur est en mode hot-standby et ne sera donc utilisé que si aucun autre serveur n'est disponible. | 
E | Err | Le serveur est en
	erreur, en général suite à un test préalable à une requête ; aucune
	requête ne lui sera soumise, mais il sera retesté en fonction de la
	valeur de son paramètre retry. | 
N | Drn | Le serveur est en mode drain ; il n'acceptera de requêtes que dans le cadre des sessions persistantes qui lui sont réservées et ignorera toutes les autres. | 
C | HcFl | Le serveur a échoué au test dynamique de bon fonctionnement et ne sera utilisé que lorsqu'il aura réussi un test ultérieur. |