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 haproxyVous pouvez vérifier la version par :
haproxy -vNous 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=1Pour 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 checkExplication :
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 50000La 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 checkLe 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 startTest 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 !
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.