Configurer un Reverse Proxy avec Apache

Introduction

Un reverse proxy ça sert à quoi ?

Et bien ça sert particulièrement dans le cadre d'auto-hébergement ou encore dans des infrastructures un peu plus avancées afin de faire de l'équilibrage/répartition de charge. Ici je vais développer le cas d'usage qui m'intéresse c'est à dire le cas de l'auto-hébergement, imaginons qui nous ayons X applications web (un wordpress, un dokuwiki,…) et que nous souhaitions tous y accèder par une URL du style MON_APP1.mondomaine.com, MON_APP2.mondomaine.com,… etc et non pas par une URL du style mondomaine.com/monapp1, mondomaine.com/monapp2,… ou pire encore via une URL du style mondomaine.com:81/monapp1, mondomaine.com:82/monapp2,… ou encore monapp1.domaine.com:81, monapp2.domaine.com:82

Pourquoi faire le choix du format d'URL monapp.mondomaine.com ?

De cette sorte vos visiteurs ont l'impression que chaque sites/applications web disposent de son propre serveur et IP, alors qu'en fait nous allons utiliser une seule et unique adresse IP publique et seulement 2 serveurs : - Le reverse proxy qui aura le port 80 de natté correctement sur la box/routeur afin de recevoir les requêtes venant du web - Le serveur web “mutualisé” qui hébergera X sites web et qui aura comme visiteur/client le reverse proxy qui servira les clients finaux

Activation du module proxy Apache

Connectez vous sur votre serveur qui jouera le rôle de reverse proxy, puis tapez :

a2enmod proxy
a2enmod proxy_http

Redémarrer ensuite apache

service apache2 restart

Création d'un fichier "type" de configuration pour un reverse proxy HTTP

Pour créer un reverse proxy, je me base sur ce modèle de configuration ci dessous c'est minimaliste mais ça fonctionne ! Dans certains cas (HTTPS par exemple) on devra customiser un peu plus la configuration…

Créer le fichier dans /etc/apache2/sites-available/ et appeler le “mon_site.conf” par exemple

vi /etc/apache2/sites-available/mon_site.conf

Puis coller ceci dedans

<VirtualHost *:80>

ServerName apps1.domaine.com
ServerAlias monautrenom.domaine.com

ProxyPreserveHost On
ProxyRequests Off

<Location />
ProxyPass http://IP_DU_SERVEUR_WEB_HEBERGEANT_LE_SITE/
ProxyPassReverse http://IP_DU_SERVEUR_WEB_HEBERGEANT_LE_SITE/
</Location>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Enregistrer avec : W Q

Puis activer la configuration et relancer apache

a2ensite mon_site.conf && service apache2 restart