Reverse proxy avec Apache

Le grand avantage de travailler sur une plateforme virtuelle avec un hyperviseur c’est de pouvoir créer des serveurs virtuels dédiés à ce que l’on veut faire. Mon serveur héberge plusieurs serveurs, un serveur pour le blog de perpinux, mon propore blog, mes courriels, un serveur de base de données mysql etc etc…

Cela me permet de séparer les rôles en plusieurs machines et m’offre une très grande souplesse d’administration en cas de panne logicielle ou matérielle.

Le tout protégé par pare-feu qui fut à l’origine de mon problème. En effet celui-ci ne permet de transférer le port 80 (port par défaut pour l’hébergement web) sur une seule machine.

Quid des autres serveurs web ?

Le proxy inverse dans la langue de molière fut ma solution. J’ai créé une machine avec apache configurer en reverse proxy. C’est le même fonctionnement qu’un proxy classique mais à l’envers. Au lieu de rediriger le reseau local vers internet, il redirige tout ce qui vient d’internet à destination du réseau local. Cela permet de ne pas avoir ses serveurs web directement exposés au feu.

Cette solution est très simple à mettre en place.

j’ai installé une machine virtuelle avec ma distribition préférée et un apache. J’ai activé le mode proxy:

$sudo a2enmod proxy

$sudo a2enmod proxy_http

Pour vérifier si les modes sont bien actifs, il faut jeter  un coup d’oeil dans /etc/apache2/mod-enabled/

sudo ls /etc/apache2/mods-enabled/ alias.conf autoindex.load mime.load setenvif.conf alias.load cgid.conf negotiation.conf setenvif.load auth_basic.load cgid.load negotiation.load ssl.conf authn_file.load deflate.conf proxy.conf ssl.load authz_default.load deflate.load proxy_connect.load status.conf authz_groupfile.load dir.conf proxy_http.load status.load authz_host.load dir.load proxy.load authz_user.load env.load reqtimeout.conf autoindex.conf mime.conf reqtimeout.load

Ensuite rien de plus simple c’est le même fonctionnement qu’un apache en mode normal avec  des Vhost pour chaque site à rédiriger.

Dans /etc/apache/sites-avaibles/ j’ai placer un fichier pour chaque sites, par exmple site1.org et site2.net :

sudo nano /etc/apache/sites-avaibles/site1

<VirtualHost 192.168.XX.XX:80> #adresse ip locale du serveur reverse proxy
	ProxyRequests Off
	ProxyPreservehost on
	ServerName site1.org
	ServerAlias www.site1.org
	ProxyPass / http://192.168.XX.XX/ #adresse ip locale du serveur web
	ProxyPassReverse / http://192.168.XX.XX/ #adresse ip locale du serveur web
	ProxyPassReverseCookieDomain 192.168.XX.XX site1.org
	LogLevel debug
</VirtualHost>

$sudo nano /etc/apache/sites-avaibles/site2

<VirtualHost 192.168.XX.XX:80> #adresse ip locale du serveur reverse proxy
	ProxyRequests Off
	ProxyPreservehost on
	ServerName site2.net
	ServerAlias www.site2.net
	ProxyPass / http://192.168.XX.XX/ #adresse ip locale du serveur web
	ProxyPassReverse / http://192.168.XX.XX/ #adresse ip locale du serveur web
	ProxyPassReverseCookieDomain 192.168.XX.XX site2.net
	LogLevel debug
</VirtualHost>

Voilà nos deux Vhosts sont prêts et configurés, il reste plus qu’a les activer et redémarrer apache pour que les modifications soient prises en compte.

$sudo a2ensite site1

$sudo a2ensite site2

$sudo /etc/init.d/apache2 restart

Une dernière modification sur mon pare-feu pour faire un transfert du 80 sur le serveur reverse proxy. Grâce à se système je peux séparer tout mes serveurs web sur différentes machines virtuelles et ainsi ne pas mettre tout mes oeufs dans le même panier.