
Debian 10 : Créer un proxy load-balancer HAProxy HTTP
Encore un article ! En forme le bougre ! Aujourd’hui nous allons rapidement voir ensemble comment installer HAProxy pour réaliser du load-balancing de plusieurs sites web Apache2.
Ces derniers temps, j’ai eut besoin de mettre en place un proxy pour réaliser du load-balancing comprenant 3-4 sites web classiques tournant sous Apache2, et étant donné que je ne l’avais encore jamais expérimenté avant, j’ai dû me dépatouiller là-dedans… et le moins qu’on puisse dire, c’est que les tutoriels en français parlant d’HAProxy ne sont pas légions (la plupart date d’il y a plusieurs années, et donc la config n’est pas forcément fonctionnelle, ou bien les autres tutos sont en anglais).
Me voilà donc ici : je vais vous expliquer rapidement comment installer un serveur HAProxy et réaliser du load-balancing de deux sites Apache2 en back-end. Alors, de prime abord tout ces termes ont l’air peut être compliqués, mais ne vous en faites pas, je vais vous résumer ça comme d’habitude 😉
1) Proxy, load-balancing, backend, frontend…
Tout d’abord, on va détailler chaque terme puis on verra ensuite pourquoi un load-balancer est utile et enfin pourquoi choisir HAProxy.
- Proxy : je ne vais pas détailler ici car j’ai déjà fait un post qui en parle, juste là ;
- Load-balancing : répartition de charges en français, là c’est de suite plus parlant ! C’est un méchanisme permettant de distribuer la
charge ; - Front-end : dans notre cas de figure, le back-end est composé des serveurs qui vont reçevoir les connexions en premier, typiquement notre ou nos load-balancer justement ;
- Back-end : ce sont les serveurs qui vont reçevoir le trafic en second, typiquement les serveurs web ;
Un peu plus clair du coup ? Et donc, l’avantage d’avoir un load-balancer, c’est de justement faire du load-balancing, et oui ! Imaginez que vous avez un site à forte affluence, et que vous n’avez qu’un seul serveur… bonne channce car celui-ci risque de flancher assez vite ! Avec un load-balancer, celui-ci va récupérer tout le trafic et le dispatcher sur plusieurs serveurs web, où votre site sera hébergé. De cette manière, la charge est moins lourde.
Vient ensuite la question d’HAProx. Pourquoi lui ? Car c’est tout simplement le plus connu (rien de foufou ici). Pour reprendre un article de linuxfr.org :
HAProxy est une solution libre, fiable et très performante de répartition de charge de niveau 4 (TCP) et 7 (HTTP). Elle est particulièrement adaptée aux sites web fortement chargés qui nécessitent de la persistance ou du traitement au niveau 7.
La fiabilité est l’un, sinon le point fort d’HAProxy. Il est par exemple utilisé par des sociétés apparaissant au classement Fortune 500 pour servir des millions de pages chaque jour.
Cette fiabilité ne s’est pas faite au détriment des performances : HAProxy requiert peu de ressources, et son architecture évènementielle mono-processus lui permet facilement de gérer plusieurs milliers de connexions simultanées sur plusieurs relais sans effondrer le système.
Bien, désormais vu que tout est clair pour vous, un rapide schéma puis on s’attèle à l’installation (rapide et simple) de tout ça !

2) Installation des deux serveurs web Apache
Ici rien d’incroyable, il nous suffit de l’installer via un petit apt install apache et le tour est joué. Vous pouvez éventuellement modifier le fichier /var/www/html/index.html pour renseigner par exemple « SRV-01 / SRV-02 » selon le serveur et ainsi voir par la suite si le load-balancing est fonctionnel.
Dans mon cas, je vais simplement modifier mon fichier hosts pour y renseigner l’adresse IP de mon proxy, car tout ceci est fait dans mon réseau local :

On fait de même pour le serveur web-02.
3) Installation du load-balancer HAProxy
Ici, on installe haproxy via un classique apt install haproxy, puis on se rend dans /etc/haproxy/ pour modifier le fichier de config de base comme suit :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners stats timeout 30s user haproxy group haproxy daemon # Default SSL material locations ca-base /etc/ssl/certs crt-base /etc/ssl/private # Default ciphers to use on SSL-enabled listening sockets. # For more information, see ciphers(1SSL). This list is from: # https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ # An alternative list with additional directives can be obtained from # https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS ssl-default-bind-options no-sslv3 defaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http # On défini la partie frontend frontend frontend-base # On défini l'IP et le port sur lequel va écouter le proxy bind 192.168.1.100:80 # On indique le nom de la partie backend dispo plus bas default_backend backend-base # On active le fait de ne pas forward les requêtes avec l'IP du # proxy mais avec l'IP du ou des clients option forwardfor # On défini la partie backend backend backend-base # On utilise la méthode roundrobin pour le loadbalancing balance roundrobin # On défini les serveurs qui sont en backend server web-01 192.168.1.110:80 check server web-02 192.168.1.120:80 check |
Donc concrètement, on rajoute simplement un bout de config en fin du fichier de config, et il ne vous reste plus qu’à lire les commentaires 😁
Une fois fait, un petit /etc/init.d/haproxy restart et on peut directement tester la chose !

Un petit coup de F5 :

Et bien voilà, vous avez installé et configuré votre premier load-balancer via HAProxy ! Alors bien entendu tout cela est très sommaire, nous n’avons pas vu comment rajouter certaines règles précises ou encore comment forwarder le trafic HTTPS, mais tout ceci sera l’objet d’un prochain article !