Guide de déploiement

HAProxy sur VPS : load balancing et haute disponibilité

Déployer sur un VPS Cloud →

Tutoriel

HAProxy sur VPS : load balancing et haute disponibilité

Déploiement8 min de lecture8 étapes

HAProxy est le standard de facto pour le load balancing et la haute disponibilité sur serveur Linux. Sur un VPS ServOrbit, il s'installe en quelques minutes via le Marketplace et se configure entièrement depuis le fichier `/etc/haproxy/haproxy.cfg`. Ce guide approfondi couvre la configuration complète — frontend/backend, ACL, terminaison SSL/TLS, health checks, page de statistiques et dépannage des erreurs les plus fréquentes — pour que votre infrastructure soit prête pour la production.

Sommaire· Pourquoi héberger HAProxy sur un VPS dédié ?1/8
  1. 01Pourquoi héberger HAProxy sur un VPS dédié ?
  2. 02Ce que vous pouvez faire avec HAProxy
  3. 03Installer et configurer HAProxy sur votre VPS ServOrbit
  4. 04Health checks avancés : détecter les backends défaillants
  5. 05Algorithmes de répartition de charge : lequel choisir ?
  6. 06Dépannage : erreurs courantes et solutions
  7. 07Erreurs fréquentes et comment les résoudre
  8. 08Pour aller plus loin

Pourquoi héberger HAProxy sur un VPS dédié ?

HAProxy (High Availability Proxy) est un logiciel open source de répartition de charge et de proxy TCP/HTTP reconnu pour ses performances en production. L'héberger sur un VPS dédié vous permet de centraliser la distribution du trafic entre vos serveurs applicatifs, d'assurer la continuité de service en cas de panne d'un nœud, et de gérer finement les règles de routage sans frais de licence. Sur un seul VPS 2 vCPU / 2 Go RAM, HAProxy traite sans effort plusieurs milliers de connexions simultanées. C'est la solution privilégiée des équipes techniques qui veulent une infrastructure robuste et maîtrisée à coût contrôlé.

Ce que vous pouvez faire avec HAProxy

  • Répartir le trafic HTTP/HTTPS entre plusieurs serveurs applicatifs avec des algorithmes configurables (roundrobin, leastconn, source…)
  • Mettre en place un reverse proxy pour exposer plusieurs services internes derrière une seule adresse IP publique
  • Surveiller la santé de vos backends avec des health checks automatiques et exclure un serveur défaillant sans interruption de service
  • Terminer les connexions SSL/TLS en frontal (offloading) pour décharger vos serveurs applicatifs du chiffrement
  • Router le trafic par domaine ou par chemin grâce aux ACL (host_hdr, path_beg) sur un seul port 443
  • Consulter les statistiques de trafic en temps réel via l'interface web intégrée de HAProxy (stats uri /stats)

Installer et configurer HAProxy sur votre VPS ServOrbit

  1. Commander un VPS Cloud ServOrbit et lancer l'installation

    Rendez-vous sur /vps-cloud et choisissez une offre avec au moins 2 vCPU et 2 Go de RAM. Depuis le tableau de bord de votre VPS, ouvrez le Marketplace, recherchez « HAProxy » et cliquez sur Installer. Le provisioning automatique de ServOrbit installe HAProxy via apt et active le service — aucune connexion SSH requise à cette étape. Vous pouvez également installer manuellement : sudo apt update && sudo apt install -y haproxy

  2. Comprendre la structure du fichier haproxy.cfg

    Le fichier de configuration principal se trouve dans /etc/haproxy/haproxy.cfg. Il est organisé en quatre sections : global (processus, logs, limites système), defaults (timeouts et modes hérités), frontend (ports d'écoute, règles ACL) et backend (serveurs cibles, algorithme, health checks). Éditez-le avec : sudo nano /etc/haproxy/haproxy.cfg

  3. Configurer un frontend HTTP/HTTPS et un backend complet

    Voici une configuration complète pour deux serveurs applicatifs avec terminaison SSL :

    global
        log /dev/log local0
        maxconn 50000
        user haproxy
        group haproxy
    
    defaults
        log     global
        mode    http
        option  httplog
        timeout connect 5s
        timeout client  30s
        timeout server  30s
    
    frontend http_front
        bind *:80
        redirect scheme https code 301
    
    frontend https_front
        bind *:443 ssl crt /etc/haproxy/certs/bundle.pem
        default_backend app_servers
    
    backend app_servers
        balance roundrobin
        option httpchk GET /health
        server app1 192.168.1.10:3000 check weight 1 inter 2s fall 3 rise 2
        server app2 192.168.1.11:3000 check weight 2 inter 2s fall 3 rise 2

    Le paramètre weight permet d'envoyer proportionnellement plus de trafic vers app2 (plus puissante). La directive option httpchk GET /health envoie une requête HTTP sur l'endpoint /health de chaque backend pour vérifier qu'il répond correctement.

  4. Configurer les ACL pour le routage par domaine et par chemin

    Les ACL permettent de router le trafic vers différents backends selon le nom de domaine ou le chemin de la requête. Ajoutez dans votre frontend :

    frontend https_front
        bind *:443 ssl crt /etc/haproxy/certs/bundle.pem
    
        acl host_api   hdr(host) -i api.monsite.com
        acl host_app   hdr(host) -i app.monsite.com
        acl path_admin path_beg  /admin
    
        use_backend api_servers  if host_api
        use_backend admin_servers if path_admin
        use_backend app_servers  if host_app
        default_backend app_servers

    La directive hdr(host) inspecte l'en-tête HTTP Host pour identifier le domaine. path_beg /admin route toutes les requêtes dont le chemin commence par /admin vers un backend dédié.

  5. Terminer SSL/TLS avec Let's Encrypt et créer le bundle PEM

    HAProxy attend un fichier .pem qui contient le certificat, la chaîne intermédiaire et la clé privée dans cet ordre. Après avoir obtenu votre certificat avec Certbot, créez le bundle :

    sudo mkdir -p /etc/haproxy/certs
    sudo cat /etc/letsencrypt/live/monsite.com/fullchain.pem \
             /etc/letsencrypt/live/monsite.com/privkey.pem \
      | sudo tee /etc/haproxy/certs/bundle.pem
    sudo chmod 600 /etc/haproxy/certs/bundle.pem

    Pour automatiser le renouvellement, ajoutez dans /etc/letsencrypt/renewal-hooks/post/haproxy.sh :

    #!/bin/bash
    cat /etc/letsencrypt/live/monsite.com/fullchain.pem \
        /etc/letsencrypt/live/monsite.com/privkey.pem \
      > /etc/haproxy/certs/bundle.pem
    systemctl reload haproxy

    Rendez ce script exécutable : sudo chmod +x /etc/letsencrypt/renewal-hooks/post/haproxy.sh

  6. Activer la page de statistiques HAProxy

    La page de statistiques intégrée donne une vue en temps réel de l'état de chaque frontend, backend et serveur. Ajoutez un bloc frontend dédié :

    frontend stats
        bind *:8404
        stats enable
        stats uri /stats
        stats refresh 10s
        stats auth admin:MotDePasseSecret
        stats hide-version

    Accédez ensuite à http://votre-ip:8404/stats. Le champ stats auth protège la page par authentification HTTP Basic. stats hide-version masque la version de HAProxy pour limiter l'exposition aux CVE publiées.

  7. Valider la configuration et recharger sans interruption

    Avant tout rechargement, validez la syntaxe du fichier de configuration :

    sudo haproxy -c -f /etc/haproxy/haproxy.cfg

    Si la commande affiche Configuration file is valid, rechargez HAProxy sans couper les connexions actives :

    sudo systemctl reload haproxy

    Vérifiez que le service est actif : sudo systemctl status haproxy. La commande reload (pas restart) garantit un rechargement graceful : les connexions établies se terminent normalement avant que les anciens workers s'arrêtent.

  8. Vérifier les logs et surveiller en continu

    HAProxy envoie ses logs vers syslog. Consultez-les en temps réel :

    sudo journalctl -u haproxy -f

    Ou dans /var/log/syslog : sudo tail -f /var/log/syslog | grep haproxy. Chaque ligne indique le frontend, le backend, le serveur sélectionné, le code HTTP et les temps de connexion — indispensable pour diagnostiquer un problème de routage ou un backend lent.

Health checks avancés : détecter les backends défaillants

La directive check sur chaque ligne server active les health checks. Par défaut, HAProxy ouvre une connexion TCP pour vérifier que le port répond. Pour aller plus loin, option httpchk GET /health envoie une vraie requête HTTP et attend un code 2xx. Les paramètres inter 2s fall 3 rise 2 signifient : vérifier toutes les 2 secondes, retirer le serveur après 3 échecs consécutifs, le réintégrer après 2 succès. Cette combinaison garantit qu'un backend en erreur est exclu du pool en 6 secondes maximum, et qu'un backend rétabli ne reçoit du trafic qu'après confirmation de sa stabilité. Ajoutez également option redispatch pour que HAProxy retente les requêtes échouées sur un autre serveur du pool — essentiel pour la transparence des pannes côté utilisateur.

Algorithmes de répartition de charge : lequel choisir ?

Faites défiler le tableau

AlgorithmeComportementIdéal pour
roundrobinDistribue les requêtes tour à tour entre les serveurs. Support du paramètre weight pour pondérer la distribution.Backends à capacités équivalentes
leastconnEnvoie chaque nouvelle requête au serveur avec le moins de connexions actives.Connexions longues (WebSocket, bases de données)
sourceHache l'IP source pour session persistence sans cookie. N'évolue pas si les sessions peuvent être partagées.Sessions non partageables entre backends
uriHache l'URI de la requête pour router toujours vers le même backend.Caches applicatifs où la localité des données compte

Dépannage : erreurs courantes et solutions

Voici les cinq erreurs les plus fréquentes lors de la configuration ou du rechargement de HAProxy, avec leur cause et la marche à suivre pour les corriger.

Erreurs fréquentes et comment les résoudre

  • [ALERT] Starting frontend http_front: cannot bind socket [0.0.0.0:80] — Le port 80 est déjà occupé par un autre processus (nginx, apache2). Identifiez-le avec sudo ss -tlnp | grep ':80', arrêtez le service concurrent (sudo systemctl stop nginx) puis rechargez HAProxy.
  • [WARNING] Server app_servers/app1 is DOWN, reason: Layer4 connection problem — HAProxy ne peut pas joindre l'adresse IP ou le port du backend. Vérifiez que le serveur applicatif est démarré, que son pare-feu autorise les connexions depuis l'IP du VPS HAProxy, et que l'adresse dans haproxy.cfg est correcte.
  • [ALERT] parsing [/etc/haproxy/haproxy.cfg:42] : unknown keyword 'serveur' — Erreur de syntaxe dans le fichier de configuration. La commande haproxy -c -f /etc/haproxy/haproxy.cfg indique le numéro de ligne exact. Les mots-clés HAProxy sont en anglais : server, frontend, backend. Vérifiez aussi les tabulations (HAProxy n'accepte que des espaces).
  • [ALERT] ssl library has no cert for frontend https_front ou erreur certificate expired** — Le fichier bundle.pem est absent, vide ou contient un certificat expiré. Recréez le bundle depuis les fichiers Let's Encrypt à jour (fullchain.pem + privkey.pem) puis rechargez.
  • Page de statistiques retourne HTTP 403 — La directive stats auth est configurée mais les identifiants ne sont pas transmis, ou l'IP source n'est pas dans une liste blanche stats allow-from. Vérifiez l'URL (/stats par défaut), les identifiants, et ajoutez stats allow-from 0.0.0.0/0 temporairement pour diagnostiquer.

Conseil : après chaque modification de haproxy.cfg, exécutez toujours sudo haproxy -c -f /etc/haproxy/haproxy.cfg avant systemctl reload. Cette validation syntaxique prend moins d'une seconde et évite une interruption de service si le fichier contient une erreur. En production, coupler ce test à un script de déploiement automatisé garantit qu'aucune configuration invalide n'atteint le service.

Pour aller plus loin

La documentation officielle de HAProxy détaille l'ensemble des directives, les options TCP avancées, le support QUIC/HTTP3 (HAProxy 2.6+) et la configuration haute disponibilité avec Keepalived pour un failover d'IP virtuelle entre deux instances HAProxy. Ce guide couvre la mise en ligne sur VPS ServOrbit ; la documentation éditeur reste la référence pour les réglages fins.

Déployez HAProxy en quelques minutes sur un VPS Cloud ServOrbit

Lancez votre VPS Cloud ServOrbit dès maintenant et installez HAProxy en 1 clic via le Marketplace — infrastructure professionnelle, sans complexité.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou contactez notre équipe — rappel, WhatsApp ou e-mail. Support en français, anglais et arabe.

Écrire sur WhatsApps'ouvre dans un nouvel onglet