Comment installer et configurer un LoadBalancer Haproxy.

De Travail-Ivan 2

Configuration de HAProxy 3.0 en Load Balancing sur Debian

Pré-requis

  • Système d'exploitation : Debian (10+ recommandé)
  • Privilèges: Accès root ou droits sudo
  • Connexion internet pour télécharger les paquets nécessaires
  • HAProxy

Installation de HAProxy 3.0

  1. Aller sur le site https://haproxy.debian.net.
  2. Sélectionner votre système linux et sa version
  3. Sélectionner la version de haproxy que vous voulez installer.
  4. Copier-coller les 4 commandes qu'il vous donne une par une sur votre machine.

Par exemple pour un Haproxy 3.0 avec Debian 12

1 ière commande

curl https://haproxy.debian.net/bernat.debian.org.gpg \
      | gpg --dearmor > /usr/share/keyrings/haproxy.debian.net.gpg
  • Si cette commande vous affiche une erreur, exécutée la commande apt install curl et ressayer la commande ci-dessus.

2ièmes commandes

echo deb "[signed-by=/usr/share/keyrings/haproxy.debian.net.gpg]" \
      http://haproxy.debian.net bookworm-backports-3.0 main \
      > /etc/apt/sources.list.d/haproxy.list

3ièmes commandes

apt update

4ièmes commandes

apt install haproxy=3.0.\*

Configuration de HAProxy pour le Load Balancing

Ouvrez le fichier de configuration pour l'éditer.

sudo nano /etc/haproxy/haproxy.cfg

Ajouter la configuration Apache en frontend et backend

Pour configurer HAProxy pour qu'il fasse du load balancing vers des serveurs backend Apache, ajoutez le bloc suivant à la fin de votre fichier de configuration (`/etc/haproxy/haproxy.cfg`).

Définition du frontend et du backend pour les serveurs Apache

Ajoutez les lignes suivantes pour définir le frontend et le backend Apache

# Définir le frontend pour Apache
frontend apache_front
    # Le frontend écoute sur le port 80
    bind *:80
    # Définir le backend par défaut pour ce frontend
    default_backend apache_backend_servers
    # Activer l'envoi de l'en-tête X-Forwarded-For
    option forwardfor

# Définir le backend pour les serveurs Apache
backend apache_backend_servers
    # Utiliser la méthode roundrobin pour équilibrer le trafic
    balance roundrobin
    # Définir les serveurs backend avec vérification de santé
    server backend01 192.168.10.11:80 check
    server backend02 192.168.10.12:80 check
  • Après avoir ajouté cette configuration, enregistrez et fermez le fichier.

Après avoir ajouté cette section, redémarrez HAProxy

sudo systemctl restart haproxy

Vérification

  • Accédez à l'adresse IP de HAProxy sur le port 80 (`http://<ip_du_serveur_haproxy>`) pour vérifier que les requêtes sont redirigées vers les serveurs backend Apache.
  • Utilisez l'option d'en-tête `X-Forwarded-For` pour conserver les adresses IP d'origine dans les logs des serveurs backend.

Conclusion

En suivant ces étapes, vous avez configuré HAProxy pour équilibrer la charge entre deux serveurs Apache en utilisant la méthode roundrobin. La configuration utilise le port 80 pour le frontend, et envoie les requêtes vers le backend `apache_backend_servers`, qui contient les deux serveurs Apache définis.

Activer l'interface de statistiques pour HAProxy

Pour activer une interface de statistiques accessible via un navigateur, ajoutez le bloc suivant à votre fichier de configuration HAProxy (`/etc/haproxy/haproxy.cfg`).

Configuration de l'interface de statistiques

Ouvrez le fichier de configuration pour l'éditer.

sudo nano /etc/haproxy/haproxy.cfg

Ajoutez les lignes suivantes pour créer une interface de statistiques:

# Définir une section listen pour l'interface de statistiques
listen stats
    # L'interface écoute sur l'adresse 192.168.0.4 et le port 8181
    bind 192.168.0.4:8181
    # Activer les statistiques
    stats enable
    # Masquer la version de HAProxy pour plus de sécurité
    stats hide-version
    # Rafraîchir la page de statistiques toutes les 30 secondes
    stats refresh 30s
    # Afficher le nom du nœud
    stats show-node
    # Configurer l'authentification pour accéder aux statistiques
    stats auth admin:admin@123
    # Définir l'URI d'accès aux statistiques
    stats uri /stats

Après avoir ajouté cette configuration, enregistrez et fermez le fichier.

Explication des options
  • `bind 192.168.0.4:8181` : Définit l'adresse IP et le port d'écoute pour l'interface de statistiques.
  • `stats enable` : Active l'interface de statistiques.
  • `stats hide-version` : Masque la version de HAProxy pour des raisons de sécurité.
  • `stats refresh 30s` : Configure un rafraîchissement automatique toutes les 30 secondes.
  • `stats show-node` : Affiche le nom de chaque nœud dans l'interface.
  • `stats auth admin:admin@123` : Active une authentification basique avec l’utilisateur `admin` et le mot de passe `admin@123`.
  • `stats uri /stats` : Définit le chemin `/stats` pour accéder à l’interface.

Redémarrer HAProxy pour appliquer les modifications

sudo systemctl restart haproxy

Accéder à l'interface de statistiques

1.Ouvrez un navigateur et allez à `http://192.168.0.4:8181/stats`.

2.Connectez-vous avec le nom d'utilisateur `admin` et le mot de passe `admin@123`.

Conclusion

Cette configuration fournit une interface web sécurisée pour surveiller en temps réel l'état des serveurs backend et des sessions, et inclut des paramètres de sécurité et de rafraîchissement pour une surveillance optimisée.

Configuration d'Apache pour Utiliser X-Forwarded-For avec HAProxy

Pour que les serveurs Apache derrière HAProxy puissent correctement traiter l'en-tête `X-Forwarded-For`, vous devez configurer le module `mod_remoteip` d'Apache.

Créer et configurer le fichier remoteip.conf

Créez le fichier de configuration pour le module `mod_remoteip`.

sudo nano /etc/apache2/conf-available/remoteip.conf
Ajoutez les lignes suivantes dans ce fichier:
# Définir le format de log pour inclure l'adresse IP d'origine
LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

# Utiliser l'en-tête X-Forwarded-For pour les adresses IP
RemoteIPHeader X-Forwarded-For

# Définir les proxys internes qui peuvent envoyer l'en-tête
RemoteIPInternalProxy 192.168.72.1/24

Après avoir ajouté cette configuration, enregistrez et fermez le fichier.

Explication des options
  • `LogFormat` : Définit le format de log pour inclure les informations d'adresse IP.
  • `RemoteIPHeader X-Forwarded-For` : Indique à Apache d'utiliser l'en-tête `X-Forwarded-For` pour récupérer l'adresse IP d'origine des clients.
  • `RemoteIPInternalProxy 192.168.72.1/24` : Spécifie l'adresse IP des proxys (comme HAProxy) qui sont autorisés à envoyer des requêtes. Cela garantit que seules les requêtes de ces adresses peuvent être considérées comme authentiques.

Activer la configuration remoteip

Après avoir créé et configuré le fichier `remoteip.conf`, activez cette configuration avec la commande suivante :

sudo a2enconf remoteip

Recharger Apache

Pour appliquer les changements, rechargez la configuration d'Apache :

sudo systemctl reload apache2

Conclusion

Avec cette configuration, Apache pourra correctement enregistrer et utiliser les adresses IP d'origine des clients en utilisant l'en-tête `X-Forwarded-For` fourni par HAProxy. Cela est essentiel pour maintenir des logs précis et pour toute logique d'application qui dépend de l'adresse IP du client.