Comment configurer Haproxy comme équilibreur de charge pour Nginx sur Centos 8

Comment configurer Haproxy comme équilibreur de charge pour Nginx sur Centos 8

Pour garantir la disponibilité maximale des applications Web, l'évolutivité et les 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 la charge. Par exemple, la configuration d'un groupe de serveurs qui exécutent tous les mêmes applications, puis déploient des équilibres de chargement devant eux pour distribuer le trafic.

Haproxy est une haute disponibilité open source, puissante, fiable, sécurisée et largement utilisée TCP / HTTP Balancer de chargement, serveur proxy et terminateur SSL / TLS construit pour des sites Web à très haut trafic. Il fonctionne bien sur Linux, Solaris, FreeBSD, Openbsd ainsi que les systèmes d'exploitation AIX.

Ce guide montre comment configurer un équilibreur de charge de haute disponibilité dédié avec Haproxy sur Centos 8 pour contrôler le trafic dans un groupe de Nginx serveurs Web. Il montre également comment configurer SSL / TLS résiliation Haproxy.

Conditions préalables:

Un total de 4 serveurs avec un minimum d'installation de CentOS 8.

Configuration de l'environnement de test

----------- Configuration du serveur Haproxy ----------- HA Proxy Server - Nom d'hôte: Haproxy-Server.Tecmint.lan; IP: 10.42.0.247 Domaine du site de test: www.Tecmint.lan ----------- Configuration des serveurs Web client ----------- Serveur Web # 1 - Nom d'hôte: Websrv1.Tecmint.lan; IP: 10.42.0.200 Web Server # 2 - Nom d'hôte: Websrv2.Tecmint.lan; IP: 10.42.0.21 serveur Web # 3 - Nom d'hôte: Websrv3.Tecmint.lan; IP: 10.42.0.34 

Étape 1: Configuration du serveur NGINX HTTP sur les machines clients

1. Connectez-vous dans tous vos Centos 8 machines clients et installer le Nginx Serveur Web utilisant le gestionnaire de packages DNF comme indiqué.

# dnf installer nginx 

2. Ensuite, commencez le Nginx Le service, pour l'instant, lui permettait de démarrer automatiquement au démarrage du système et de confirmer qu'il est opérationnel en vérifiant son statut, en utilisant les commandes SystemCTL (faites-le sur toutes les machines clients).

# systemctl start nginx # systemctl activer nginx # statut systemctl nginx 

3. De plus, si le service Firewalld s'exécute sur toutes les machines clients (que vous pouvez vérifier en exécutant SystemCTL Start Firewalld), vous devez ajouter le Http et Https Les services dans la configuration du pare-feu pour permettre aux demandes de l'équilibreur de charge passe par le pare-feu Nginx serveurs Web. Puis recharger le pare-feu Service pour effectuer les nouvelles modifications (faites-le sur toutes les machines clients).

# 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 le Nginx L'installation fonctionne bien. Utilisez les IP du client pour naviguer, une fois que vous voyez le Nginx Page de test, cela signifie que le serveur Web installé sur la machine client fonctionne correctement.

Tester l'installation de Nginx sur toutes les machines client CentOS 8

5. Ensuite, nous devons créer des pages de test sur les machines clients que nous utiliserons plus tard pour tester le Haproxy installation.

----------- Serveur Web # 1 ----------- # cp / usr / share / nginx / html / index.html / usr / share / nginx / html / index.html.orig # echo "Affichage du site de WebSrv1.Tecmint.lan "> / usr / share / nginx / html / index.html ----------- Serveur Web n ° 2 ----------- # cp / usr / share / nginx / html / index.html / usr / share / nginx / html / index.html.orig # echo "Affichage du site à partir de Websrv2.Tecmint.lan "> / usr / share / nginx / html / index.html ----------- Serveur Web # 3 ----------- # cp / usr / share / nginx / html / index.html / usr / share / nginx / html / index.html.orig # echo "Affichage du site à partir de websrv3.Tecmint.lan "> / usr / share / nginx / html / index.html 

Étape 2: Installation et configuration du serveur Haproxy sur Centos 8

6. Installez maintenant le Haproxy package sur le Haproxy serveur en exécutant la commande suivante.

# DNF Installer Haproxy 

7. Ensuite, commencez le Haproxy Service, permettez-lui à de démarrer automatiquement au démarrage du système et à vérifier son statut.

# systemctl start haproxy # systemctl activer haproxy # statut systemctl status haproxy 
Vérifiez le statut de haproxy dans les centos 8

8. Nous allons maintenant configurer le haproxy à l'aide du fichier de configuration suivant.

# vi / etc / haproxy / haproxy.CFG 

Le fichier de configuration est divisé en quatre sections principales.

  • paramètres globaux - Définit les paramètres à l'échelle du processus.
  • par défaut - Cette section définit les paramètres par défaut pour toutes les autres sections après sa déclaration.
  • l'extrémité avant - Cette section décrit un ensemble de prises d'écoute acceptant les connexions du client.
  • Backend - Cette section décrit un ensemble de serveurs auxquels le proxy se connectera aux connexions entrantes.

Pour comprendre les options sous paramètres globaux et par défaut, Lisez la documentation Haproxy (lien fourni à la fin de l'article). Pour ce guide, nous utiliserons les valeurs par défaut.

Configuration de la journalisation haproxy

9. Haproxy Une fois la fois déployée, jouera un rôle important dans votre infrastructure informatique, la configuration de la journalisation est donc une exigence de base; Cela vous permet d'obtenir des informations sur chaque connexion à vos serveurs Web backend.

Le paramètre de journal (mis en évidence dans la capture d'écran suivante) Syslog serveur (tel que rsyslog la valeur par défaut dans CentOS) qui recevra des messages de journal. Plus d'un serveur peut être déclaré ici.

La configuration par défaut pointe vers le hôte local (127.0.0.1) et local2 est le code d'installation par défaut utilisé pour identifier les messages de journal haproxy sous rsyslog.

Paramètre de journal par défaut de Haproxy

dix. Ensuite, vous devez dire le rsyslog serveur comment recevoir et traiter Haproxy enregistrer les messages. Ouvrez le fichier de configuration RSYSLOG à / etc / rsyslog.confli ou créez un nouveau fichier dans le / etc / rsyslog.d Répertoire, par exemple / etc / rsyslog.d / haproxy.confli.

# vi / etc / rsyslog.d / haproxy.confli 

Copiez et collez la configuration suivante pour collecter le journal avec UDP sur le port par défaut 514.

$ Modload iMudp $ udpServerAddress 127.0.0.1 $ udpserverrun 514 

Ajoutez également ces lignes pour instruire rsyslog Pour écrire à deux fichiers journaux distincts en fonction de la gravité, où local2 Le code de l'installation est-il défini dans la configuration Haproxy ci-dessus.

local2.* / var / log / haproxy-trafic.journal local2.Avis / var / log / haproxy-admin.enregistrer 

11. Enregistrez le fichier et fermez-le. Puis redémarrez le rsyslog Service pour appliquer les changements récents.

# systemctl redémarrer rsyslog 

Configuration de Haproxy Front-end et back-end

12. Dans cette section, nous montrerons comment configurer les proxys frontaux et back-end. Retournez au Haproxy Fichier de configuration et modifier les sections frontales et backend par défaut 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 un écouter Section utilisée pour servir le Statistiques de Haproxy page. Le lier Le paramètre attribue un auditeur à une adresse IP donnée (* pour tous dans ce cas) et port (9000).

Les statistiques activer Le réglage permet la page statistique qui sera accessible en utilisant le Uri / statistiques (je.e http: // server_ip: 9000 / statistiques).

Les statistiques authentification Le paramètre est utilisé pour ajouter une authentification de base lors de l'accès à la page (remplacer haproxy et [Protégé par e-mail] avec un nom d'utilisateur et un mot de passe de votre choix).

Écouter Stats Bind *: 9000 statistiques Activer les statistiques Hide-Version Statistiques URI / Statistiques Statistiques Admin si LocalHost Stats Auth Haproxy: [Protégé par e-mail] 

13. La configuration suivante définit une section frontend appelée Tl (vous pouvez donner un nom de votre goût). Le mode Le paramètre définit le mode Haproxy fonctionne dans.

Le ACL (Liste de contrôle d'accès) Le paramètre est utilisé pour prendre une décision basée sur le contenu extrait de la demande. Dans cet exemple, la demande est considérée comme claire Http Si ce n'est pas fait SSL.

Puis le leader de set de la demande HTTP Le paramètre est utilisé pour ajouter un en-tête HTTP à la demande. Cela aide à informer Nginx que la demande initiale a été faite Http (ou via le port 80).

Le default_backend ou use_backend La directive définit les serveurs backend, dans ce cas, référencés par Tl_web_servers.

Noter que Haproxy retournera un "503 Erreur indisponible du service«Si une demande n'est pas acheminée par un use_backend ou default_backend directif.

Frontend tl bind *: 80 mode http acl http ssl_fc, pas http-request set-header x-fiwarded-protocol http si http default_backend tl_web_servers 

14. Ensuite, nous devons définir une section backend où le équilibre Le réglage définit comment Haproxy Sélectionne les serveurs back-end pour traiter une demande si aucune méthode de persistance ne remplace cette sélection.

Le biscuit directive active cookie persévérance, il instruit Haproxy Pour envoyer un cookie nommé Serveur au client et pour l'associer au IDENTIFIANT du serveur qui a donné la réponse initiale.

Le serveur La directive est utilisée pour définir les serveurs en amont dans le format SEVER_NAME (e.g Websrv1), server_ip: port et options.

Une option clé est vérifier qui raconte Haproxy Pour continuer à vérifier la disponibilité d'un serveur et faire un rapport sur la page des statistiques.

Backend TL_WEB_SERVERS MODE HTTP Balance Roundrobin Option httpchk Head / Cookie ServerUid INSERT INDERRECT NOCACHE Server Websrv1 10.42.0.200: 80 Cookie Websrv1 Vérifier le serveur WebSrv2 10.42.0.21:80 Cookie Websrv2 Vérifier le serveur 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.

Configuration de Haproxy Front-end et back-end

15. Redémarrez maintenant le Haproxy Service pour appliquer les nouvelles modifications.

# SystemCTL Redémarrer Haproxy 

16. Ensuite, assurez-vous que le Http (port 80) et Https (port 433) Les services sont ouverts dans le pare-feu pour accepter les demandes des clients comme suit. Aussi, port ouvert 9000 dans le pare-feu pour accéder à la page des statistiques et recharger 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: Test des statistiques de configuration et de visualisation de Haproxy

17. Maintenant il est temps de tester le Haprxoy installation. Sur la machine de bureau locale où vous accédez à tous les serveurs, ajoutez la ligne suivante dans le / etc / hôtes fichier pour nous permettre d'utiliser le domaine du site factice.

dix.42.0.247 www.Tecmint.lan 

18. Ensuite, ouvrez un navigateur et naviguez à l'aide de l'adresse du serveur ou du domaine du site.

http: // 10.42.0.247 / ou http: // www.Tecmint.lan / 
Vérifier la configuration de l'haproxy

19. Pour accéder au Haproxy Page statistique, utilisez l'adresse suivante.

http: // 10.42.0.247: 9000 / statistiques 

Ensuite, utilisez le nom d'utilisateur et le mot de passe que vous avez défini dans le fichier de configuration Haproxy (reportez-vous au paramètre Auth Stats).

Page de connexion des statistiques Haproxy

Après une connexion réussie, vous atterrirez au Haproxy Page de statistiques qui vous montre des métriques qui couvrent la santé de vos serveurs, les taux de demande actuels, les temps de réponse et bien plus encore.

Pour démontrer comment fonctionne le rapport d'état concernant les codes de couleur, nous avons mis l'un des serveurs back-end.

Rapport de statistiques Haproxy

Étape 4: Configuration de HTTPS dans Haproxy à l'aide d'un certificat SSL auto-signé

20. Dans cette dernière section, nous montrerons comment configurer SSL / TLS Pour sécuriser toutes les communications entre le serveur Haproxy et le client. Haproxy soutient quatre majeurs Https Modes de configuration, mais pour ce guide, nous utiliserons SSL / TLS déchargement.

Dans SSL / TLS mode de déchargement, Haproxy déchiffre le trafic sur le côté client et se connecte dans le trafic clair vers les serveurs backend.

Nous allons commencer par créer le certificat et clé Comme indiqué (répondez aux questions en conséquence sur la base des détails de votre entreprise pendant la création de certificat, comme souligné 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.clé -out / etc / ssl / tecmint.lan.CRT # CD / etc / ssl / tecmint.LAN / # CAT Tecmint.CRT Tecmint.Clé> Tecmint.pem # ls -l 
Créer un SSL pour Haproxy

21. Ensuite, ouvrez le Haproxy fichier de configuration (/ etc / haproxy / haproxy.CFG) et modifier la section frontale.

Frontend TL Bind *: 80 Bind *: 443 SSL CRT / ETC / SSL / Tecmint.LAN / Tecmint.schéma de redirection pem https si !SSL_FC MODE HTTP ACL HTTP SSL_FC, PAS ACL HTTPS SSL_FC HTTP-REQUEST SET-HEDER X-FORWARDED-PROTOCOL HTTP IF HTTP HTTP-REQUEST SET-HEADER X-Forwarded-protoCol HTTP 
Configurer le front-end haproxy avec SSL

Enregistrez le fichier et fermez-le.

22. Puis redémarrez le service Haproxy pour appliquer les nouvelles modifications.

# SystemCTL Redémarrer Haproxy.service 

23. Ensuite, ouvrez un navigateur Web et essayez d'accéder une fois de plus sur le site. Le navigateur affichera une erreur en raison du certificat auto-signé, cliquez sur Avancé procéder.

Erreur de connexion Haproxy SSL Procéder à la connexion Site d'accès sur HTTPS

C'est tout pour le moment! Chaque application Web a son propre ensemble d'exigences, vous devez concevoir et configurer l'équilibrage de chargement en fonction de votre infrastructure informatique et des 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, Voir la documentation officielle de Haproxy Community Edition ou Haproxy Enterprise Version Documentation. Vous pouvez poster des questions ou des réflexions via le formulaire de rétroaction ci-dessous.