Serveur Web · 5 min read · Nov 12, 2025

Équilibrage de charge de serveur Web avec HAProxy sur Ubuntu 14.04

Qu’est-ce que HAProxy ?

HAProxy (High Availability Proxy) est un équilibreur de charge open-source qui peut équilibrer n’importe quel service TCP. HAProxy est une solution gratuite, très rapide et fiable qui offre un équilibrage de charge, une haute disponibilité et un proxy pour les applications basées sur TCP et HTTP. Il est particulièrement bien adapté aux sites Web à très fort trafic et alimente bon nombre des plus visités au monde.

Depuis son existence, il est devenu la norme de facto des équilibreurs de charge open-source. Bien qu’il ne se fasse pas de publicité, il est largement utilisé. Ci-dessous se trouve un diagramme de base de la configuration :

Installation de HAProxy

J’utilise Ubuntu 14.04 et je l’installe par :

apt-get install haproxy

Vous pouvez vérifier la version par :

haproxy -v

Nous devons activer HAProxy pour qu’il soit démarré par le script d’initialisation /etc/default/haproxy. Définissez l’option ENABLED sur 1 comme suit :

ENABLED=1

Pour vérifier si ce changement a été effectué correctement, exécutez le script d’initialisation de HAProxy sans aucun paramètre. Vous devriez voir ce qui suit :

$ service haproxy   
 reload   restart  start    status   stop

HAProxy est maintenant installé. Créons maintenant une configuration dans laquelle nous avons 2 (deux) instances de serveur Web Apache et 1 (une) instance de HAProxy. Voici les informations de configuration :

Nous allons utiliser trois systèmes, créés virtuellement via VirtualBox :

Instance 1 - Équilibreur de charge

Nom d’hôte : haproxy
OS : Ubuntu
IP privée : 192.168.205.15

Instance 2 - Serveur Web 1

Nom d’hôte : webser01
OS : Ubuntu avec LAMP
IP privée : 192.168.205.16

Instance 2 - Serveur Web 2

Nom d’hôte : webserver02
OS : Ubuntu avec LAMP
IP privée : 192.168.205.17

Voici le diagramme de la configuration :

Configurons maintenant HAProxy.

Configuration de HAProxy

Sauvegardez le fichier original en le renommant :

mv /etc/haproxy/haproxy.cfg{,.original}

Nous allons créer notre propre fichier haproxy.cfg. À l’aide de votre éditeur de texte préféré, créez le fichier /etc/haproxy/haproxy.cfg comme suit :

global
        log /dev/log   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout     5000
        clitimeout     50000
        srvtimeout     50000

listen webfarm 0.0.0.0:80
    mode http
    stats enable
    stats uri /haproxy?stats
    balance roundrobin
    option httpclose
    option forwardfor
    server webserver01 192.168.205.16:80 check
    server webserver02 192.168.205.17:80 check

Explication :

global
        log /dev/log   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon

La directive de journal mentionne un serveur syslog auquel les messages de journal seront envoyés.
La directive maxconn spécifie le nombre de connexions simultanées sur le front-end. La valeur par défaut est 2000 et doit être ajustée en fonction de la configuration de votre système.
Les directives user et group changent le processus HAProxy à l’utilisateur/groupe spécifié. Celles-ci ne doivent pas être modifiées.

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout     5000
        clitimeout     50000
        srvtimeout     50000

La section ci-dessus contient les valeurs par défaut. L’option redispatch active la redistribution de session en cas d’échecs de connexion. Ainsi, la persistance de session est annulée si une instance de serveur Web tombe en panne.
La directive retries définit le nombre de tentatives à effectuer sur une instance de serveur Web après un échec de connexion.
Les valeurs à modifier sont les différentes directives de délai d’attente. L’option contimeout spécifie le temps maximum à attendre pour qu’une tentative de connexion à une instance de serveur Web réussisse.
Les délais d’attente clitimeout et srvtimeout s’appliquent lorsque le client ou le serveur est censé reconnaître ou envoyer des données pendant le processus TCP. HAProxy recommande de définir les délais d’attente client et serveur sur la même valeur.


listen webfarm 0.0.0.0:80
    mode http
    stats enable
    stats uri /haproxy?stats
    balance roundrobin
    option httpclose
    option forwardfor
    server webserver01 192.168.205.16:80 check
    server webserver02 192.168.205.17:80 check

Le bloc ci-dessus contient la configuration pour le frontend et le backend. Nous configurons HAProxy pour écouter sur le port 80 pour webfarm, qui est juste un nom pour identifier une application.
Les directives stats activent la page de statistiques de connexion. Cette page peut être consultée avec l’URL mentionnée dans stats uri, donc dans ce cas, c’est http://192.168.205.15/haproxy?stats, une démo de cette page peut être vue ici.
La directive balance spécifie l’algorithme d’équilibrage de charge à utiliser. Les options d’algorithme disponibles sont :

  • Round Robin (roundrobin),
  • Round Robin statique (static-rr),
  • Moins de connexions (leastconn),
  • Source (source),
  • URI (uri) et
  • Paramètre d’URL (url_param).

Des informations sur chaque algorithme peuvent être obtenues à partir de la documentation officielle.

La directive server déclare un serveur backend, la syntaxe est :

server  [:port] [param*]

Le nom que nous mentionnons ici apparaîtra dans les journaux et les alertes. Il existe d’autres paramètres pris en charge par cette directive et nous utiliserons le paramètre check dans cet article. L’option check active les vérifications de santé sur l’instance de serveur Web, sinon, l’instance de serveur Web est toujours considérée comme disponible.

Une fois que vous avez terminé la configuration, démarrez le service HAProxy :

sudo service haproxy start

Test de l’équilibrage de charge et de la bascule

Nous allons ajouter le nom du serveur dans le fichier index.html par défaut situé par défaut à /var/www/index.html.

Sur l’Instance 2 - Serveur Web 1 (webserver01 avec IP- 192.168.205.16), ajoutez la ligne ci-dessous :

sudo sh -c "echo 

Nom d'hôte : webserver01 (192.168.205.16)

>> /var/www/index.html"

Sur l’Instance 3 - Serveur Web 2 (webserver02 avec IP- 192.168.205.17), ajoutez la ligne ci-dessous :

sudo sh -c "echo 

Nom d'hôte : webserver02 (192.168.205.17)

>> /var/www/index.html"

Maintenant, ouvrez le navigateur Web sur la machine locale et parcourez l’IP de haproxy c’est-à-dire http://192.168.205.15.

Chaque fois que vous rafraîchissez l’onglet, vous verrez que la charge est répartie entre chaque serveur Web. Ci-dessous se trouve une capture d’écran de mon navigateur :

Pour la première fois que je visite http://192.168.205.15, je reçois :

Et pour la deuxième fois, c’est-à-dire lorsque je rafraîchis la page, je reçois :

Vous pouvez également vérifier les statistiques de haproxy en visitant http://192.168.205.15/haproxy?stats.

Il y a plus que vous pouvez faire avec cette configuration. Quelques idées incluent :

  • mettre hors ligne un ou les deux serveurs Web pour tester ce qui se passe lorsque vous accédez à HAProxy
  • configurer HAProxy pour servir une page de maintenance personnalisée
  • configurer l’interface Web afin que vous puissiez surveiller visuellement les statistiques de HAProxy
  • changer le planificateur pour quelque chose d’autre que round-robin
  • configurer la priorisation/les poids pour des serveurs particuliers

C’est tout !

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.