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
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 haproxyComprendre 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) etbackend(serveurs cibles, algorithme, health checks). Éditez-le avec :sudo nano /etc/haproxy/haproxy.cfgConfigurer 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 2Le paramètre
weightpermet d'envoyer proportionnellement plus de trafic vers app2 (plus puissante). La directiveoption httpchk GET /healthenvoie une requête HTTP sur l'endpoint/healthde chaque backend pour vérifier qu'il répond correctement.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_serversLa directive
hdr(host)inspecte l'en-tête HTTP Host pour identifier le domaine.path_beg /adminroute toutes les requêtes dont le chemin commence par/adminvers un backend dédié.Terminer SSL/TLS avec Let's Encrypt et créer le bundle PEM
HAProxy attend un fichier
.pemqui 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.pemPour 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 haproxyRendez ce script exécutable :
sudo chmod +x /etc/letsencrypt/renewal-hooks/post/haproxy.shActiver 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-versionAccédez ensuite à
http://votre-ip:8404/stats. Le champstats authprotège la page par authentification HTTP Basic.stats hide-versionmasque la version de HAProxy pour limiter l'exposition aux CVE publiées.Valider la configuration et recharger sans interruption
Avant tout rechargement, validez la syntaxe du fichier de configuration :
sudo haproxy -c -f /etc/haproxy/haproxy.cfgSi la commande affiche
Configuration file is valid, rechargez HAProxy sans couper les connexions actives :sudo systemctl reload haproxyVérifiez que le service est actif :
sudo systemctl status haproxy. La commandereload(pasrestart) garantit un rechargement graceful : les connexions établies se terminent normalement avant que les anciens workers s'arrêtent.Vérifier les logs et surveiller en continu
HAProxy envoie ses logs vers syslog. Consultez-les en temps réel :
sudo journalctl -u haproxy -fOu 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
| Algorithme | Comportement | Idéal pour |
|---|---|---|
| roundrobin | Distribue les requêtes tour à tour entre les serveurs. Support du paramètre weight pour pondérer la distribution. | Backends à capacités équivalentes |
| leastconn | Envoie chaque nouvelle requête au serveur avec le moins de connexions actives. | Connexions longues (WebSocket, bases de données) |
| source | Hache l'IP source pour session persistence sans cookie. N'évolue pas si les sessions peuvent être partagées. | Sessions non partageables entre backends |
| uri | Hache 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 avecsudo 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 danshaproxy.cfgest correcte.[ALERT] parsing [/etc/haproxy/haproxy.cfg:42] : unknown keyword 'serveur'— Erreur de syntaxe dans le fichier de configuration. La commandehaproxy -c -f /etc/haproxy/haproxy.cfgindique 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_frontou erreurcertificate 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 authest configurée mais les identifiants ne sont pas transmis, ou l'IP source n'est pas dans une liste blanchestats allow-from. Vérifiez l'URL (/statspar défaut), les identifiants, et ajoutezstats allow-from 0.0.0.0/0temporairement 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.