HA Proxy et multiples serveurs http sur le port 80 (Suite et fin)

Pour faire suite à ce magnifique article, voici venir la solution qui va nous permettre de dispatcher nos requêtes http vers le bon serveur en se basant sur le nom de domaine.

On va ajouter des backends à notre configuration haproxy.
Par défaut j’aime avoir un backend par serveur, et un backend de clustering.

# ================
# --- BACKENDS ---
# ================

backend BACKEND_HTTP1
        cookie SERVERID insert indirect nocache
        server TB_001 127.0.0.11:8080 cookie tb001 weight 100 maxconn 100 check

backend BACKEND_HTTP2
        cookie SERVERID insert indirect nocache
        server TB_002 192.168.1.12:8080 cookie tb002 weight 100 maxconn 100 check

backend BACKEND_HTTP
        server TB_001 192.168.1.11:8080 cookie tb001 weight 40 maxconn 100 check
        server TB_002 192.168.1.12:8080 cookie tb002 weight 60 maxconn 100 check

NB: N’oubliez pas de mettre un fichier « check.txt » sur chacun de vos serveurs, et de les faire tourner sur le port 8080

Uns fois haproxy redémarré, vous pouvez vérifier sur la page de stats que tout est bien passé au vert.
thierry-bugeat-haproxy

Il reste maintenant à créer les ACLs pour rediriger nos noms de domaines vers le bon serveur.

# ============
# --- HTTP ---
# ============

listen FRONTEND_HTTP 192.168.1.11:80
        mode http 
        log global
        option  httplog
        stats enable
        stats auth XXXXXXXXXX:XXXXXXXXXX
        balance roundrobin
        option httpclose 
        option forwardfor
        option httpchk HEAD /check.txt HTTP/1.0
        capture request header Host len 20

        acl ACL_CLOUD           hdr(host) -i cloud.bugeat.com   
        acl ACL_THIERRY         hdr(host) -i thierry.bugeat.com 
        acl ACL_WALLABAG        hdr(host) -i wallabag.bugeat.com

        use_backend BACKEND_HTTP2 if ACL_CLOUD   
        use_backend BACKEND_HTTP1 if ACL_THIERRY 
        use_backend BACKEND_HTTP1 if ACL_WALLABAG

        default_backend BACKEND_HTTP

Je pense que cette configuration est suffisemment claire.
On déclare une ACL qui se base sur le nom de domaine…

...
        acl ACL_CLOUD           hdr(host) -i cloud.bugeat.com   
        acl ACL_THIERRY         hdr(host) -i thierry.bugeat.com 
        acl ACL_WALLABAG        hdr(host) -i wallabag.bugeat.com
...

…puis on utilise le backend associé.

...
        use_backend BACKEND_HTTP2 if ACL_CLOUD   
        use_backend BACKEND_HTTP1 if ACL_THIERRY 
        use_backend BACKEND_HTTP1 if ACL_WALLABAG
...

Au final on a 2 serveurs http accessibles au travers de la même IP.

Les commentaires sont désactivés.