Reverse proxy avec Apache 2
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/
$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ès est configuré, 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.