Récemment, j’ai eu besoin d’utiliser un serveur Apache 2.2 pour faire suivre toutes les requêtes HTTP entrantes vers un serveur installé sur un réseau local. Le tout sans que le navigateur client s’en aperçoive et en modifiant l’URL.
Bien évidemment, c’est une combinaison de fonctionnalités qu’Apache sait réaliser, mais qui demande un minimum de connaissances sur la configuration d’Apache et qui peut conduire temporairement à un arrachage de cheveux. C’est pourquoi ce petit article sans prétention résume la démarche en 2 étapes.
Mettre en place un reverse proxy
Tout d’abord on veut faire suivre la requête vers un serveur masqué à l’utilisateur. Je n’entrerai pas dans les motivations de ce choix (sécurité, équilibrage de charge, …). En tout cas, c’est le module mod_proxy d’Apache qu’il nous faut. Pour l’activer, rien de plus simple : dans le fichier de configuration d’Apache, il faut ajouter les 3 lignes suivantes :
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
ProxyRequests On
Notez également que des sécurisations sont certainement nécessaires.
Modifier les URL à la volée
Dans notre exemple, on va supposer que toutes les requêtes qui arrivent sur Apache doivent être envoyées vers http://192.168.0.10:8080/url_modifiee.
Cela signifie que toute URL /une_url_au_hasard?param1=toto doit être renvoyée vers http://192.168.0.10:8080/url_modifiee/une_url_au_hasard?param1=toto.
C’est là qu’intervient maintenant le module mod_rewrite :
LoadModule rewrite_module modules/mod_rewrite.so
RewriteEngine On
RewriteRule ^/$ http://192.168.0.10:8080/url_modifiee [P,L]
On remarquera le drapeau P qui est fondamental : c’est lui qui indique au moteur de réécriture qu’il faut faire suivre la requête via le proxy.
Conclusion
Cet article n’a qu’effleurer le sujet, en particulier au niveau de la sécurité. On ne saurait trop conseiller de lire exhaustivement la documentation de mod_proxy.