Reverse proxy avec Apache et mod_proxy sur Ubuntu

LiB Ubuntu

Au boulot je travaille sur des distributions serveur Scientific Linux, basé sur RedHat. Je suis donc habitué à l’installation et configuration d’Apache sur RedHat, même si mes machines personnelles sont toujours basés sur Ubuntu ou Debian.

Il y a une quinzaine de jours, pour préparer le Bootcamp Android du FinistGDG, j’ai eu besoin d’un reverse proxy sur ma Dedibox. Et vu que j’ai dû batailler un peu pour que cela marche, je préfère consigner la manip ici, afin de me souvenir pour a prochaine fois (et accessoirement de dépatouiller quelqu’un qui aurait le même besoin et qui tomberait sur cette page 😉 ).

Je suis parti d’une Ubuntu avec Apache2 installé et configuré avec plusieurs virtual hosts. L’objectif était d’ajouter un virtual host qui faisait du frontal reverse proxy pour un tomcat installé sur la machine.

D’abord j’ai installé mod_proxy sur l’Apache2

$ sudo apt-get install libapache2-mod-proxy-html

Ensuite il faut activer le mod_proxy pour les protocoles qu’on souhaite, et c’est là où j’ai pris un peu de temps pour comprendre mon soucis. J’ai commencé pour activer mod_proxy :

$ sudo a2enmod proxy

Sauf que, bien entendu, cela ne marchait pas. J’obtenais une erreur pas trop parlant à première abord :

proxy: No protocol handler was valid for the URL

Pourquoi ? J’avais du mal à comprendre ce qui manquait, jusqu’à que j’ai saisi le problème, Apache ne savait pas comment gérer mes appels, car il ne savait pas comment faire proxy HTTP. C’était logique, car j’avais activé mod_proxy mais pas tous ces composants, et surtout pas celui qui me fallait, le proxy HTTP. Je voulais que mon proxy soit un reverse proxy HTTP. Il fallait donc activer ce mode :

$ sudo a2enmod proxy proxy_http

Une fois cela compris, la conf habituelle de mon virtual host a marché sans soucis :

<VirtualHost *:80>
    ServerName lostinbrittany.org
    ServerAlias www.lostinbrittany.org

    [...]

    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>    
    ProxyPass /java/ http://127.0.0.1:8080/
    ProxyPassReverse /java/ http://127.0.0.1:8080/
</VirtualHost>

L’objectif était donc de rediriger en interne (reverse proxy) toutes les appels vers https://lostinbrittany.org/java/ vers un tomcat installé sur la même machine et écoutant sur le port 8080.

Tags: , ,

Leave a Reply