Pour assurer une disponibilité maximale des applications web, leur scalabilité et leurs performances élevées, il est désormais courant de mettre en œuvre des technologies qui introduisent la redondance, telles que le clustering de serveurs et l’équilibrage de charge. Par exemple, la configuration d’un cluster de serveurs exécutant tous les mêmes applications, puis le déploiement de répartiteurs de charge devant eux pour distribuer le trafic.
HAProxy est un répartiteur de charge TCP/HTTP, un serveur mandataire et un terminateur SSL/TLS open-source, puissant, à haute performance, fiable, sécurisé et largement utilisé pour les sites web à très fort trafic. Il fonctionne de manière fiable sous les systèmes d’exploitation Linux, Solaris, FreeBSD, OpenBSD ainsi que AIX.
Ce guide montre comment configurer un répartiteur de charge haute disponibilité dédié avec HAProxy sur CentOS 8 pour contrôler le trafic dans un cluster de serveurs web NGINX. Il démontre également comment configurer la terminaison SSL/TLS dans HAProxy.
Prérequis :
A total of 4 servers with minimal CentOS 8 installation.
Configuration de l’environnement de test
----------- HAProxy Server Setup ----------- HA Proxy Server - hostname: haproxy-server.tecmint.lan; IP: 10.42.0.247 Test Site Domain: www.tecmint.lan ----------- Client Web Servers Setup ----------- Web Server #1 - hostname: websrv1.tecmint.lan; IP: 10.42.0.200 Web Server #2 - hostname: websrv2.tecmint.lan; IP: 10.42.0.21 Web Server #3 - hostname: websrv3.tecmint.lan; IP: 10.42.0.34
Étape 1 : Configuration du serveur HTTP Nginx sur les machines clientes
1. Connectez-vous à toutes vos machines clientes CentOS 8 et installez le serveur web Nginx à l’aide du gestionnaire de paquets dnf comme indiqué.
# dnf install Nginx
2. Ensuite, démarrez le service Nginx, activez-le pour démarrer automatiquement au démarrage du système et confirmez qu’il est en cours d’exécution en vérifiant son statut, en utilisant les commandes systemctl (faites ceci sur toutes les machines clientes).
# systemctl start nginx # systemctl enable nginx # systemctl status nginx
3. De plus, si le service firewalld est en cours d’exécution sur toutes les machines clientes (ce que vous pouvez vérifier en exécutant systemctl start firewalld), vous devez ajouter les services HTTP et HTTPS dans la configuration du pare-feu pour permettre aux requêtes du répartiteur de charge de passer à travers le pare-feu vers les serveurs web Nginx. Ensuite, rechargez le service firewalld pour appliquer les nouveaux changements (faites ceci sur toutes les machines clientes).
# firewall-cmd --zone=public --permanent --add-service=http # firewall-cmd --zone=public --permanent --add-service=https # firewall-cmd --reload
4. Ensuite, ouvrez un navigateur web sur vos machines locales et testez si l’installation de Nginx fonctionne correctement. Utilisez les adresses IP des clients pour naviguer, une fois que vous voyez la page de test Nginx, cela signifie que le serveur web installé sur la machine cliente fonctionne correctement.

5. Ensuite, nous devons créer des pages de test sur les machines clientes que nous utiliserons plus tard pour tester la configuration de HAProxy.
----------- Web Server #1 ----------- # cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig # echo "Showing site from websrv1.tecmint.lan"> /usr/share/nginx/html/index.html ----------- Web Server #2 ----------- # cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig # echo "Showing site from websrv2.tecmint.lan"> /usr/share/nginx/html/index.html ----------- Web Server #3 ----------- # cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig # echo "Showing site from websrv3.tecmint.lan"> /usr/share/nginx/html/index.html
Étape 2 : Installation et configuration du serveur HAProxy sur CentOS 8
6. Installez maintenant le package HAProxy sur le serveur HAProxy en exécutant la commande suivante.
# dnf install haproxy
7. Ensuite, démarrez le service HAProxy, activez-le pour démarrage automatique au démarrage du système et vérifiez son état.
# systemctl start haproxy # systemctl enable haproxy # systemctl status haproxy

8. Maintenant, nous allons configurer le HAProxy en utilisant le fichier de configuration suivant.
# vi /etc/haproxy/haproxy.cfg
Le fichier de configuration est divisé en quatre sections majeures.
- paramètres globaux – définit les paramètres globaux du processus.
- par défaut – cette section définit les paramètres par défaut pour toutes les autres sections suivant sa déclaration.
- frontend – cette section décrit un ensemble de sockets d’écoute acceptant les connexions client.
- Backend – cette section décrit un ensemble de serveurs auxquels le proxy se connectera pour transférer les connexions entrantes.
Pour comprendre les options sous les paramètres globaux et par défaut, consultez la documentation HAProxy (lien fourni à la fin de l’article). Pour ce guide, nous utiliserons les paramètres par défaut.
Configuration des journaux HAProxy
9. Une fois déployé, HAProxy jouera un rôle significatif dans votre infrastructure informatique, il est donc essentiel de configurer les journaux pour obtenir des informations sur chaque connexion à vos serveurs web backend.
Le paramètre de journalisation (surligné dans la capture d’écran suivante) déclare un serveur Syslog global (tel que rsyslog, le choix par défaut dans CentOS) qui recevra les messages de journalisation. Plus d’un serveur peut être déclaré ici.
La configuration par défaut pointe vers localhost (127.0.0.1) et local2 est le code d’équipement par défaut utilisé pour identifier les messages de journalisation HAProxy sous rsyslog.

10. Ensuite, vous devez indiquer au serveur rsyslog comment recevoir et traiter les messages de journalisation HAProxy. Ouvrez le fichier de configuration rsyslog à /etc/rsyslog.conf ou créez un nouveau fichier dans le répertoire /etc/rsyslog.d, par exemple /etc/rsyslog.d/haproxy.conf.
# vi /etc/rsyslog.d/haproxy.conf
Copiez et collez la configuration suivante pour collecter les journaux avec UDP sur le port par défaut 514.
$ModLoad imudp $UDPServerAddress 127.0.0.1 $UDPServerRun 514
Ajoutez également ces lignes pour indiquer à rsyslog d’écrire dans deux fichiers journaux distincts en fonction de la gravité, où local2 est le code d’équipement défini dans la configuration HAProxy ci-dessus.
local2.* /var/log/haproxy-traffic.log local2.notice /var/log/haproxy-admin.log
11. Enregistrez le fichier et fermez-le. Ensuite, redémarrez le service rsyslog pour appliquer les changements récents.
# systemctl restart rsyslog
Configuration des Frontaux et des Arrières de HAProxy
12. Dans cette section, nous allons démontrer comment configurer les proxies frontal et arrière. Revenez au fichier de configuration HAProxy et modifiez les sections frontal par défaut et arrière comme suit. Nous n’entrerons pas dans une explication détaillée de chaque paramètre, vous pouvez toujours vous référer à la documentation officielle.
La configuration suivante définit une section listen utilisée pour servir la page Statistiques de HAProxy. Le paramètre bind attribue un écouteur à une adresse IP donnée (*
pour tout dans ce cas) et port (9000).
Le paramètre enable des stats active la page de statistiques qui sera accessible en utilisant l’URI /stats (c’est-à-dire http://adresse_ip_serveur:9000/stats
).
Le paramètre auth des stats est utilisé pour ajouter une authentification de base lors de l’accès à la page (remplacez haproxy et Lostp@1ss par un nom d’utilisateur et un mot de passe de votre choix).
listen stats bind *:9000 stats enable stats hide-version stats uri /stats stats admin if LOCALHOST stats auth haproxy:Lostp@1ss
13. La configuration suivante définit une section frontend appelée TL (vous pouvez donner un nom de votre choix). Le paramètre mode définit le mode dans lequel HAProxy fonctionne.
Le paramètre acl (Liste de contrôle d’accès) est utilisé pour prendre une décision basée sur le contenu extrait de la requête. Dans cet exemple, la requête est considérée comme étant du simple HTTP si elle n’est pas faite via SSL.
Ensuite, le paramètre http-request set-header est utilisé pour ajouter un en-tête HTTP à la requête. Cela aide à informer Nginx que la requête initiale a été faite via HTTP (ou via le port 80).
La directive default_backend ou use_backend définit les serveurs backend, dans ce cas, référencés par TL_web_servers.
Notez que HAProxy renverra une erreur « 503 Service Unavailable » si une requête n’est pas dirigée par une directive use_backend ou default_backend.
frontend TL bind *:80 mode http acl http ssl_fc,not http-request set-header X-Forwarded-Protocol http if http default_backend TL_web_servers
14. Ensuite, nous devons définir une section backend où le paramètre balance définit comment HAProxy sélectionne les serveurs backend pour traiter une requête si aucune méthode de persistance ne remplace cette sélection.
La directive cookie permet la persistance basée sur les cookies, elle demande à HAProxy d’envoyer un cookie nommé SERVERID au client et de l’associer à l’ ID du serveur qui a donné la réponse initiale.
La directive server est utilisée pour définir les serveurs amont dans le format nom_serveur (par exemple websrv1), adresse_IP_serveur:port et options.
Une option clé est vérifier qui indique à HAProxy de continuer à vérifier la disponibilité d’un serveur et de rapporter sur la page des statistiques.
backend TL_web_servers mode http balance roundrobin option httpchk HEAD / cookie SERVERUID insert indirect nocache server websrv1 10.42.0.200:80 cookie websrv1 check server websrv2 10.42.0.21:80 cookie websrv2 check server websrv3 10.42.0.34:80 cookie websrv3 check
Commentez toutes les autres sections frontend et backend comme indiqué dans la capture d’écran qui suit. Enregistrez le fichier et fermez-le.

15. Redémarrez maintenant le service HAProxy pour appliquer les nouvelles modifications.
# systemctl restart haproxy
16. Ensuite, assurez-vous que les services HTTP (port 80) et HTTPS (port 433) sont ouverts dans le pare-feu pour accepter les demandes des clients comme suit. Ouvrez également le port 9000 dans le pare-feu pour accéder à la page des statistiques et rechargez les paramètres du pare-feu.
# firewall-cmd --zone=public --permanent --add-service=http # firewall-cmd --zone=public --permanent –add-service=https # firewall-cmd --zone=public --permanent --add-port=9000/tcp # firewall-cmd --reload
Étape 3 : Tester la configuration de HAProxy et visualiser les statistiques
17. Il est maintenant temps de tester la configuration de HAProxy. Sur la machine de bureau locale à partir de laquelle vous accédez à tous les serveurs, ajoutez la ligne suivante dans le fichier /etc/hosts pour nous permettre d’utiliser le domaine du site fictif.
10.42.0.247 www.tecmint.lan
18. Ensuite, ouvrez un navigateur et naviguez en utilisant soit l’adresse du serveur, soit le domaine du site.
http://10.42.0.247/ OR http://www.tecmint.lan/

19. Pour accéder à la page des statistiques de HAProxy, utilisez l’adresse suivante.
http://10.42.0.247:9000/stats
Ensuite, utilisez le nom d’utilisateur et le mot de passe que vous avez définis dans le fichier de configuration de HAProxy (reportez-vous au paramètre d’authentification des statistiques).

Après une connexion réussie, vous arriverez sur la page de statistiques de HAProxy qui vous montre des métriques couvrant la santé de vos serveurs, les taux de requêtes actuelles, les temps de réponse, et bien plus encore.
Pour illustrer comment fonctionne le rapport d’état en ce qui concerne les codes couleur, nous avons mis en place l’un des serveurs en back-end.

Étape 4 : Configuration de HTTPS dans HAProxy en utilisant un certificat SSL auto-signé
20. Dans cette dernière section, nous allons démontrer comment configurer SSL/TLS pour sécuriser toutes les communications entre le serveur HAProxy et le client. HAProxy prend en charge quatre modes de configuration majeurs pour HTTPS, mais pour ce guide, nous utiliserons le déchargement SSL/TLS.
En mode déchargement SSL/TLS, HAProxy déchiffre le trafic côté client et se connecte en trafic clair aux serveurs en back-end.
Nous commencerons par créer le certificat et la clé comme indiqué (répondez aux questions en fonction des détails de votre entreprise lors de la création du certificat, comme indiqué sur la capture d’écran).
# mkdir /etc/ssl/tecmint.lan # cd /etc/ssl/tecmint.lan/ # openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/tecmint.lan.key -out /etc/ssl/tecmint.lan.crt # cd /etc/ssl/tecmint.lan/ # cat tecmint.crt tecmint.key >tecmint.pem # ls -l

21. Ensuite, ouvrez le fichier de configuration de HAProxy (/etc/haproxy/haproxy.cfg) et modifiez la section front-end.
frontend TL bind *:80 bind *:443 ssl crt /etc/ssl/tecmint.lan/tecmint.pem redirect scheme https if !{ ssl_fc } mode http acl http ssl_fc,not acl https ssl_fc http-request set-header X-Forwarded-Protocol http if http http-request set-header X-Forwarded-Protocol https if https default_backend TL_web_servers

Enregistrez le fichier et fermez-le.
22. Puis redémarrez le service HAProxy pour appliquer les nouvelles modifications.
# systemctl restart haproxy.service
23. Ensuite, ouvrez un navigateur web et essayez d’accéder au site une fois de plus. Le navigateur affichera une erreur en raison du certificat auto-signé, cliquez sur Avancé pour continuer.



C’est tout pour le moment ! Chaque application web a ses propres exigences, vous devez concevoir et configurer l’équilibrage de charge pour répondre à votre infrastructure IT et aux exigences de l’application.
Pour obtenir plus d’informations sur certaines des options de configuration utilisées dans ce guide, et généralement comment utiliser HAProxy, consultez la documentation officielle de la communauté HAProxy ou la documentation de la version entreprise de HAProxy. Vous pouvez poser des questions ou partager vos réflexions via le formulaire de feedback ci-dessous.
Source:
https://www.tecmint.com/setup-nginx-haproxy-load-balancer-in-centos-8/