blog.bressure.net

Carnet professionnel d'un informaticien

Paramétrage

Traefik et Haproxy – reverse proxy avec selection par hôte ou préfixe d’url

admin

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é.

Rappel de l’objet de la migration

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.

plusieurs envrionnements

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:

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Back to top