J’ai poursuivi la simplification de mon reverse proxy apache en déplaçant les routages vers la couche Haproxy. Traefik n’étant pour l’heure non activé.

Interface de statistique de haproxy
La documentation indique de déclarer un frontend dédié pour l’interface de statistique. Bien discipliné on ajoute dans le fichier de configuration du haproxy les lignes suivantes:
frontend stats
bind *:8404
stats enable
stats uri /stats
stats refresh 10s
stats admin if LOCALHOST
Comme notre haproxy est dockerisé, il faut exposer le port 8404 afin qu’il soit accessible depuis le reverse proxy apache. Ainsi dans le fichie docker-compose.yml du haproxy:
ports:
# The HTTP port
- "7070:80"
# the admin port
- "8404:8404"
Interface de visualisation Traefik
L’interface de visualisation de Traefik a été activé dans le billet précédent en utilisant le mode insecure qui ne passe pas par le routage de Traefik lui-même mais simplement en exposant un port qui permet d’accéder à l’IHM via l’IP de l’hôte.
Pour atteindre ces interface je passe par un lien direct entre celles-ci et le reverse proxy apache qui fournira le TLS et un moyen d’authentification.

Accéder à plusieurs environnements
La configuration du reverse proxy apache est triviale en définissant un hôte virtuel (nom de domaine) ce qui jusque là me permet d’ajouter à tour de bras des services. Cependant j’ai plusieurs environnements : production, staging et infra. Il me faut pouvoir accéder aux IHM sur ces environnements. Traefik se trouve sur chacun d’eux et Haproxy sur l’infra et staging.

Préfixe de chemin par environnement
Comme je ne voulais limiter la configuration de apache j’avais pour idée d’utiliser le même nom de domaine haproxy.bressure.net pour accéder à l’IHM du haproxy puis en utilisant l’url /infra ou /staging ou /production appeler le bon serveur. Ainsi dans un même VirtualHost j’utilise la directive suivante déclinée en 3 fois:
ProxyRequests Off
<Location "/infra">
ProxyPass "http://localhost:8404/stats"
ProxyPassReverse "http://localhost:8404/stats"
ProxyPassReverse /
ProxyHTMLEnable On
ProxyHTMLURLMap http://localhost:8404/stats/ /infra/
ProxyHTMLURLMap / /infra/
</Location>
L’utilisation de ProxyHTML permet de réécrire les url présente s dans la page HTML de réponse afin que les liens continue d’avoir le préfixe /infra. En effet la page de statistique contient des liens sur la racine de l’url ce qui pointe le navigateur vers / au lieu de /infra.
… impossible avec Traefik
Malheureusement cela n’a pas fonctionné avec Traefik. Malgré la mise en oeuvre de la réécriture des liens, l’IHM de Traefik utilise XHR. Les url générée par javascript sont hors scope du module ProxyHTML de apache. Ces url pointent vers la racine du site donc traefik.bressure.net au lieu de traefik.bressure.net/infra. Finalement je me suis résolu à passer par des noms de domaines spécifiques par environnement dans le cas de l’IHM de Traefik. Pöur rappel dans un VirtualHost défini par un nom de domaine il suffit d’ajouter les directives suivantes:
ProxyPassReverse "/" "http://IP:PORT"
ProxyPass "/" "http://IP:PORT/"
Maintenant que je dipose d’un accès aux outils de mise au points du routages, je vais pouvoir m’atteler à faire fonctionner le routage automatique de Traefik. La suite au prochain billet.
Tags: apache haproxy Traefik