Configuration Apache : du bon usage de RedirectMatch et de mod_proxy
lundi 19 mars 2012
RedirectMatch
La clause RedirectMatch permet de faire des redirections basées sur une expression régulière. Le cas d’utilisation le plus classique quand on fait un proxy vers une application hébergée dans un serveur JEE est de rediriger la racine / vers le répertoire de l’application /appli/ :
RedirectMatch ^/$ /appli/
mod_proxy
Le module mod_proxy permet de passer les requêtes à un autre serveur, au hasard un serveur JEE :
ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/
Cohabitation
Si vous mettez les deux configurations présentées ci-dessus ensemble, la redirection vers /appli/ ne fonctionnera plus. Alors qu’elle fonctionne sans mod_proxy.
Et c’est parti pour quelques heures de doute sur la condition humaine, jusqu’à ce qu’une recherche sur internet vous amène sur cet article.
La clé du mystère est que quand ProxyPass est configuré sur "/", cette clause prévaut sur les autres, et donc la requête est transmise avant que la redirection ne soit effectuée.
La solution est donc de limiter le champ d’action du proxy :
RedirectMatch ^/$ /appli/ ProxyPass /appli/ http://localhost:8080/appli/ ProxyPassReverse /appli/ http://localhost:8080/appli/