En con­fi­gu­rant un reverse-proxy comme couche de pro­tec­tion sup­plé­men­taire, vous améliorez la sécurité de votre ap­pli­ca­tion Web en mi­ni­mi­sant le risque d’attaque. Le serveur HTTP Apache dispose de nombreux modules et ex­ten­sions qui prennent en charge dif­fé­rentes fonctions de proxy. Ce guide explique comment mettre en place et con­fi­gu­rer un reverse-proxy Apache pas à pas.

C’est quoi mod_proxy ?

Apache est un serveur Web open source aussi connu que répandu. Il est utilisé pour la mise à dis­po­si­tion de contenus Web sur Internet. On le retrouve sur de nombreux systèmes d’ex­ploi­ta­tion tels que Windows, Linux et macOS et il existe plusieurs plugins et modules d’extension.

Le module mod_proxy permet au serveur Apache d’agir comme un reverse-proxy, en trans­met­tant les requêtes à un autre serveur et en renvoyant la réponse au client. Cette procédure trouve toute son utilité si vous souhaitez, par exemple, répartir la charge entre plusieurs serveurs Web. De quoi ainsi améliorer les per­for­mances ou mettre en place une ar­chi­tec­ture haute dis­po­ni­bi­lité.

Apache mod_proxy se compose de plusieurs modules avec leurs fonc­tion­na­li­tés propres. Voici quelques-uns des modules les plus im­por­tants :

  • mod_proxy : fournit la fonc­tion­na­lité prin­ci­pale du reverse-proxy et transmet les requêtes à un autre serveur ;
  • mod_proxy_http : fournit des fonctions de proxy pour les pro­to­coles HTTP et HTTPS ;
  • mod_proxy_ftp : possède des fonctions proxy pour le protocole FTP ;
  • mod_proxy_connect : pour les con­nexions chiffrées SSL ;
  • mod_proxy_ajp : sert à rediriger les requêtes vers des serveurs d’ap­pli­ca­tions com­pa­tibles AJP ;
  • mod_proxy_wstunnel : pour l’uti­li­sa­tion de sockets Web ;
  • mod_proxy_balancer : fonctions d’équi­li­brage de charge ;
  • mod_cache : im­plé­mente un filtre de mise en cache ;
  • mod_headers : modifie les lignes d’en-tête HTTP ;
  • mod_deflate : compresse les réponses HTTP.
Conseil

L’hé­ber­ge­ment Linux par IONOS prend en charge un grand nombre de modules Apache qui per­met­tent de con­fi­gu­rer ra­pi­de­ment et ef­fi­ca­ce­ment votre propre reverse-proxy Apache. Profitez de per­for­mances évo­lu­tives, d’une pro­tec­tion DDOS et de fonc­tion­na­li­tés PHP de haut niveau.

Mise en place d’un reverse-proxy Apache étape par étape

Ce tutoriel implique que vous ayez déjà installé Apache sur votre système. À cet effet, vous trouverez des in­for­ma­tions dé­tail­lées sur la manière de con­fi­gu­rer un serveur Web Apache dans notre Digital Guide.

Étape 1 : mettre à jour la liste des paquets

Tout d’abord, vous devez mettre à jour la liste des paquets dis­po­nibles.

Tapez la commande suivante dans une fenêtre de terminal :

$ sudo aptitude update
shell

Mettez ensuite à jour les paquets installés sur votre système :

$ sudo aptitude upgrade -y
shell

Étape 2 : té­lé­char­ger Build Essential

Ensuite, il faut installer le paquet Build Essential. Il s’agit d’un paquet d’outils et de bi­blio­thèques né­ces­saires à la création et à la com­pi­la­tion d’ap­pli­ca­tions sous Linux.

$ sudo aptitude install -y build-essential
shell

Étape 3 : installer les modules et dé­pen­dances

À présent, il faut té­lé­char­ger et installer les modules et bi­blio­thèques né­ces­saires pour le reverse-proxy Apache.

$ sudo aptitude install -y libapache2-mod-proxy-html libxml2-dev
shell

Étape 4 : activer les modules

Avant d’activer les ex­ten­sions, vérifiez qu’elles ont été cor­rec­te­ment ins­tal­lées. La commande suivante affiche la liste des modules dis­po­nibles :

$ a2enmod
shell
Image: Exécution de a2enmod
Commande a2enmod dans le terminal

Lors de l’exécution de la commande a2enmod, le système demande quels modules vous souhaitez installer. Vous pouvez lister les ex­ten­sions sou­hai­tées dans une ligne unique :

$ proxy proxy_ajp proxy_http rewrite deflate headers proxy_balancer proxy_connect proxy_html
shell

Mais vous pouvez aussi activer chaque module sé­pa­ré­ment :

$ a2enmod proxy
$ a2enmod proxy_http
$ a2enmod proxy_ajp
$ a2enmod rewrite
$ a2enmod deflate
$ a2enmod headers
$ a2enmod proxy_balancer
$ a2enmod proxy_connect
$ a2enmod proxy_html
shell

Certains modules sont activés par défaut. Avec a2enmod, vous vous assurez qu’ils sont bien activés.

Étape 5 : modifier la con­fi­gu­ra­tion par défaut

La mise en œuvre les fonctions de proxy du serveur Apache passe par la mo­di­fi­ca­tion du fichier de con­fi­gu­ra­tion standard 000-default.conf dans le ré­per­toire /etc/apache2/sites-enabled.

$ nano /etc/apache2/sites-enabled/000-default.conf
shell

Cela se fait par la mise en place d’un hôte proxy virtuel avec les ex­ten­sions mod_vir­tual­host et mod_proxy. Vous pouvez adapter le code à votre con­ve­nance.

<VirtualHost *:*>
        ProxyPreserveHost On
        # Servers to proxy the connection, or;
        # List of application servers:
        # Usage:
        # ProxyPass / http://[IP Addr.]:[port]/
        # ProxyPassReverse / http://[IP Addr.]:[port]/
        # Example:
        ProxyPass / http://0.0.0.0/
        ProxyPassReverse / http://0.0.0.0/
        ServerName localhost
    </VirtualHost>
shell

Appuyer sur Ctrl + X et Y pour en­re­gis­trer les mo­di­fi­ca­tions et fermer l’éditeur de texte.

Étape 6 : con­fi­gu­rer la ré­par­ti­tion de charge

Si vous exploitez plusieurs serveurs backend, mieux vaut répartir la charge au moyen du load-balancing.

Vous pouvez pour cela vous inspirer du code suivant comme modèle pour l’insérer dans le fichier de con­fi­gu­ra­tion standard :

<Proxy balancer://mycluster>
        # Define back-end servers:
        # Server 1
        BalancerMember http://0.0.0.0/
        # Server 2
        BalancerMember http://0.0.0.0/
    </Proxy>
    <VirtualHost *:*>
        # Apply VH settings as desired
        # However, configure ProxyPass argument to
        # use "mycluster" to balance the load
        ProxyPass / balancer://mycluster
    </VirtualHost>
shell

Étape 7 : con­fi­gu­rer le SSL

Si vous souhaitez utiliser Apache SSL pour les con­nexions chiffrées et les cer­ti­fi­cats, vous devez activer un deuxième hôte virtuel.

Listen 443
    NameVirtualHost *:443
    <VirtualHost *:443>
        SSLEngine On
        # Set the path to SSL certificate
        # Usage: SSLCertificateFile /path/to/cert.pem
        SSLCertificateFile /etc/apache2/ssl/file.pem
        # Servers to proxy the connection, or;
        # List of application servers:
        # Usage:
        # ProxyPass / http://[IP Addr.]:[port]/
        # ProxyPassReverse / http://[IP Addr.]:[port]/
        # Example:
        ProxyPass / http://0.0.0.0/
        ProxyPassReverse / http://0.0.0.0/
        # Or, balance the load:
        # ProxyPass / balancer://balancer_cluster_name
    </VirtualHost>
shell

Étape 8 : re­dé­mar­rer Apache

Une fois la con­fi­gu­ra­tion terminée, re­dé­mar­rez le serveur Web Apache pour que les mo­di­fi­ca­tions soient prises en compte.

$ service apache2 restart
shell

À présent, le reverse-proxy Apache devrait trans­mettre les requêtes à vos serveurs backend.

Aller au menu principal