Recherche de site Web

Comment utiliser Nginx comme équilibreur de charge HTTP sous Linux


Lorsqu'il s'agit de configurer plusieurs serveurs d'applications pour la redondance, l'équilibrage de charge est un mécanisme couramment utilisé pour distribuer efficacement les demandes de service entrantes ou le trafic réseau sur un groupe de serveurs back-end.

L'équilibrage de charge présente plusieurs avantages, notamment une disponibilité accrue des applications grâce à la redondance, une fiabilité et une évolutivité accrues (plus de serveurs peuvent être ajoutés au mix lorsque le trafic augmente). Cela entraîne également des performances améliorées des applications et de nombreux autres avantages.

Lecture recommandée : Le guide ultime pour sécuriser, renforcer et améliorer les performances du serveur Web Nginx

Nginx peut être déployé comme un équilibreur de charge HTTP efficace pour répartir le trafic réseau entrant et la charge de travail entre un groupe de serveurs d'applications, en renvoyant dans chaque cas la réponse du serveur sélectionné au client approprié.

Les méthodes d'équilibrage de charge prises en charge par Nginx sont :

  • round-robin – qui distribue les requêtes aux serveurs d'applications de manière circulaire. Il est utilisé par défaut lorsqu'aucune méthode n'est spécifiée,
  • le moins connecté – attribue la requête suivante à un serveur le moins occupé (le serveur avec le moins de connexions actives),
  • ip-hash – où une fonction de hachage est utilisée pour déterminer quel serveur doit être sélectionné pour la prochaine requête en fonction de l'adresse IP du client. Cette méthode permet la persistance de la session (lier un client à un serveur d'applications particulier).

En outre, vous pouvez utiliser les pondérations des serveurs pour influencer les algorithmes d'équilibrage de charge Nginx à un niveau plus avancé. Nginx prend également en charge les vérifications de l'état pour marquer un serveur comme ayant échoué (pendant une durée configurable, la valeur par défaut est 10 secondes) si sa réponse échoue avec une erreur, évitant ainsi de sélectionner cette erreur. serveur pour les demandes entrantes ultérieures pendant un certain temps.

Ce guide pratique montre comment utiliser Nginx comme équilibreur de charge HTTP pour répartir les requêtes client entrantes entre deux serveurs ayant chacun une instance de la même application.

À des fins de test, chaque instance d'application est étiquetée (sur l'interface utilisateur) pour indiquer le serveur sur lequel elle s'exécute.

Configuration de l'environnement de test

Load Balancer: 192.168.58.7
Application server 1: 192.168.58.5
Application server 2: 192.168.58.8

Sur chaque serveur d'applications, chaque instance d'application est configurée pour être accessible à l'aide du domaine tecmintapp.lan. En supposant qu'il s'agisse d'un domaine entièrement enregistré, nous ajouterions ce qui suit dans les paramètres DNS.

A Record   		@   		192.168.58.7

Cet enregistrement indique les requêtes des clients vers lesquelles le domaine doit diriger, dans ce cas, l'équilibreur de charge (192.168.58.7). Les enregistrements DNS A acceptent uniquement les valeurs IPv4. Alternativement, le fichier /etc/hosts sur les machines clientes peut également être utilisé à des fins de test, avec l'entrée suivante.

192.168.58.7  	tecmintapp.lan

Configuration de l'équilibrage de charge Nginx sous Linux

Avant de configurer l'équilibrage de charge Nginx, vous devez installer Nginx sur votre serveur à l'aide du gestionnaire de packages par défaut pour votre distribution, comme indiqué.

sudo apt install nginx   [On Debian/Ubuntu]
sudo yum install nginx   [On CentOS/RHEL]   

Ensuite, créez un fichier de bloc serveur appelé /etc/nginx/conf.d/loadbalancer.conf (donnez le nom de votre choix).

sudo vi /etc/nginx/conf.d/loadbalancer.conf

Copiez et collez ensuite la configuration suivante. Cette configuration est par défaut circulaire car aucune méthode d'équilibrage de charge n'est définie.

 
upstream backend {
        server 192.168.58.5;
        server 192.168.58.8;
    }
	
    server {
        listen      80 default_server;
        listen      [::]:80 default_server;
        server_name tecmintapp.lan;

        location / {
	        proxy_redirect      off;
	        proxy_set_header    X-Real-IP $remote_addr;
	        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
	        proxy_set_header    Host $http_host;
		proxy_pass http://backend;
	}
}

Dans la configuration ci-dessus, la directive proxy_pass (qui doit être spécifiée à l'intérieur d'un emplacement, / dans ce cas) est utilisée pour transmettre une requête aux serveurs proxy HTTP référencés à l'aide du mot backend, dans la directive amont (utilisée pour définir un groupe de serveurs). De plus, les requêtes seront réparties entre les serveurs à l’aide d’un mécanisme d’équilibrage à tour de rôle pondéré.

Pour utiliser le mécanisme de connexion minimum, utilisez la configuration suivante

upstream backend {
        least_conn;
        server 192.168.58.5;
        server 192.168.58.8;
    }

Et pour activer le mécanisme de persistance de session ip_hash, utilisez :

upstream backend {
	ip_hash;
        server 192.168.58.5;
        server 192.168.58.8;
    }

Vous pouvez également influencer la décision d'équilibrage de charge à l'aide des pondérations du serveur. En utilisant la configuration suivante, s'il y a six requêtes de clients, le serveur d'applications 192.168.58.5 se verra attribuer 4 requêtes et 2 iront à 192.168.58.8.

upstream backend {
        server 192.168.58.5	weight=4;
        server 192.168.58.8;
    }

Enregistrez le fichier et quittez-le. Assurez-vous ensuite que la structure de configuration Nginx est correcte après avoir ajouté les modifications récentes, en exécutant la commande suivante.

sudo nginx -t

Si la configuration est correcte, redémarrez et activez le service Nginx pour appliquer les modifications.

sudo systemctl restart nginx
sudo systemctl enable nginx

Test de l'équilibrage de charge Nginx sous Linux

Pour tester l'équilibrage de charge Nginx, ouvrez un navigateur Web et utilisez l'adresse suivante pour naviguer.

http://tecmintapp.lan

Une fois l'interface du site Web chargée, prenez note de l'instance d'application qui a été chargée. Actualisez ensuite continuellement la page. À un moment donné, l'application devrait être chargée à partir du deuxième serveur, indiquant l'équilibrage de charge.

Vous venez d'apprendre comment configurer Nginx comme équilibreur de charge HTTP sous Linux. Nous aimerions connaître votre avis sur ce guide, et en particulier sur l'utilisation de Nginx comme équilibreur de charge, via le formulaire de commentaires ci-dessous. Pour plus d'informations, consultez la documentation Nginx sur l'utilisation de Nginx comme équilibreur de charge HTTP.