PROJET AUTOBLOG


IT-Connect

Site original : IT-Connect

⇐ retour index

Mise en place d’un Reverse Proxy Apache avec mod_proxy

lundi 21 juillet 2014 à 08:59

I. Présentation

Aujourd’hui nous allons étudier la mise en oeuvre d’Apache en tant que reverse proxy en premier-plan (Front-end) d’un autre serveur apache qui sera lui l’arrière-plan (back-end). Nous utiliserons pour cela le module mod_proxy et mod_proxy_http d’Apache. Nous allons juste chercher à rediriger les flux arrivant sur un serveur en destination d’un certain nom de domaine vers un serveur situé plus en amont dans l’architecture. Nous ne prendrons pas ici les sujets de répartition de charge ou de Load-Balancing que peut effectuer le rôle de reverse proxy. Le système de reverse proxy peut ici être schématisé comme suivant  :RProxy01

On a donc un premier serveur en front-end qui reçoit l’ensemble des requêtes et plusieurs serveurs web back-end qui contient chacun un site web différent (ou le même dans le cadre d’une répartition de charge). On va donc configurer le serveur reverse proxy pour rediriger chaque requêtes en fonction de l’URL et du contenu demandé. Cela peut s’opérer par dossier (rediriger juste /image vers un serveur spécifique par exemple) ou pour une URL complète, ce que nous allons voir ici.

II. Architecture

Pour illustrer la mise en place de notre reverse proxy Apache dans ce tutoriel, nous suivrons le schéma suivant :

RProxy02

 

J’ai donc un premier serveur avec l’IP publique 192.168.1.12 qui va recevoir l’ensemble des requêtes des clients. Il contient le www.site1.tuto. J’ai ensuite un second serveur qui lui contient le site www.site2.tuto. Nous allons donc configurer notre premier serveur Reverse Proxy afin qu’il redirige les requêtes www.site2.tuto par le second serveur, remplissant ainsi son rôle de reverse proxy. En revanche il continuera de répondre aux requêtes pour www.site1.tuto, ceci pour illustrer le fonctionnement pour un site normal et site utilisant un reverse proxy.

Je pars ici du principe que les machines sont en place au niveau OS, réseau et ont un service Apache fonctionnel avec un site web par machine répondant chacun aux bonnes URL.

III. Installation et configuration

Nous allons dans un premier temps activer le proxy_http sur le serveur reverse proxy. Celui-ci est le module mod_proxy spécifique au protocole HTTP avec lequel nous travaillons ici. Pour cela, on saisi la commande suivante :

a2enmod proxy_http

Le module “proxy” devrait s’activer en même temps :

RProxy03

On va ensuite redémarrer apache2 pour que les modules soient actifs :

service apache2 restart

Nous allons maintenant créer deux hôtes virtuels. Un qui dirigera les requêtes site1.tuto vers le contenu local, un autre qui aura le rôle du reverse proxy et qui dirigera les requête site2.tuto vers le second serveur avec une configuration standard.

touch /etc/apache2/sites-avaliable/site1.tuto
touch /etc/apache2/sites-avaliable/site2.tuto

On va maintenant remplir ces configurations, je mets volontairement uniquement les informations nécessaires pour garder l’essentiel en vu :

Voici la configuration du site1.tuto

< VirtualHost *:80 >
        ServerName www.site1.tuto
        DocumentRoot /var/www/site1
< /VirtualHost >

Voici la configuration du site2.tuto qui est celui sur lequel agira le reverse proxy :

< VirtualHost *:80 >
        ServerName www.site2.tuto
        ProxyPreserveHost On
        ProxyRequests On
        ProxyPass / http://192.168.248.131/
        ProxyPassReverse / http://192.168.248.131
< /VirtualHost >

Puis on pourra les activer :

a2ensite site1.tuto
a2ensite site2.tuto

On peut maintenant recharger la configuration d’Apache2 :

service apache2 reload

On va maintenant passer à la période de test.

Note : A ce stade, il faut également vérifier que les sites testés (ici site1.tuto et site2.tuto) soient bien résolus au niveau DNS pour amener ver le premier serveur ayant le rôle de reverse proxy.

Pour cela il suffit simplement d’aller sur chacun des deux sites, le plus important étant bien sûr d’avoir une réponse du second serveur qui se situe derrière le reverse proxy :

RProxy04

Nous avons donc un serveur reverse proxy en place.

IV. Aller plus loin

Pour aller plus loin, il est commun de trouver sur ce genre de serveur des fonctionnalités avancées de sécurité ou de cache. On peut par exemple utiliser le module de cache d’Apache pour alléger la charge des serveurs. On trouve également souvent le module mod_security qui permet de filtrer les requêtes et de les bloquer si elles semblent porter atteinte à la sécurité des sites web. De plus, on utilise souvent le reverse proxy pour des fonctions de répartition de charge et de load-balancing que nous verront probablement dans d’autres tutoriels ;)