Répartition de charge avec NGINX et NGINX Plus, partie 1

NGINX | 20 février 2014

NGINX est un proxy d’accélération performant pour un large éventail d’applications basées sur HTTP. Sa mise en cache, sa gestion des connexions HTTP et son délestage améliorent considérablement les performances des applications, en particulier pendant les périodes de forte charge.

Note de l’éditeur – NGINX Plus version 5 et les versions ultérieures peuvent également répartir la charge des applications basées sur TCP. Les fonctionnalités de répartition de charge TCP ont été considérablement étendues dans la version 6 avec l’ajout des contrôles d’intégrité, de la reconfiguration dynamique, de la terminaison SSL, entre autres. Dans NGINX Plus version 7<.htmla> et les versions ultérieures, le répartiteur de charge TCP offre les mêmes fonctionnalités que le répartiteur de charge HTTP. La prise en charge de la répartition de charge UDP a été introduite dans la version 9.

Vous configurez l’équilibrage de charge TCP et UDP dans le contexte stream plutôt que dans le contexte http. Les directives et paramètres disponibles diffèrent quelque peu en raison des différences intrinsèques entre HTTP et TCP/UDP. Pour plus de détails, consultez la documentation des modules Upstream HTTP et TCP.

NGINX Plus étend les fonctionnalités de NGINX en ajoutant des fonctions avancées de répartition de charge : contrôles d’intégrité, persistance de session, surveillance de l’activité en temps réel, ainsi que la configuration dynamique des groupes de serveurs avec répartition de charge.

Cet article de blog vous guide dans la configuration de NGINX afin de répartir la charge du trafic entre plusieurs serveurs web. Il présente également certaines des fonctionnalités supplémentaires de NGINX Plus.

Pour aller plus loin, vous pouvez également consulter le Guide d’administration de NGINX Plus ainsi que l’article qui fait suite à celui-ci, « Équilibrage de charge avec NGINX et NGINX Plus, partie 2 ».

Proxyfication du trafic avec NGINX

Nous allons commencer par transmettre le trafic à deux serveurs web en amont via un proxy. La configuration NGINX suivante suffit à traiter toutes les requêtes HTTP adressées au port 80 et à les répartir à tour de rôle entre les serveurs web du groupe en amont :

http {    server {
        listen 80;

        location / {
            proxy_pass http://backend;
        }
    }

    upstream backend {
        server web-server1:80;
        server web-server2:80;
    }
}

Avec cette configuration simple, NGINX transmet chaque requête reçue sur le port 80 à web-server1 et web-server2 à tour de rôle, en établissant à chaque fois une nouvelle connexion HTTP.

Définition de la méthode de répartition de charge

Par défaut, NGINX utilise la méthode Round Robin pour répartir uniformément le trafic entre les serveurs, en tenant compte d’un « poids » facultatif attribué à chaque serveur afin d’indiquer sa capacité relative.

La méthode « hachage IP » distribue le trafic en fonction d’un hachage de l’adresse IP source. Les requêtes provenant d’une même adresse IP cliente sont toujours envoyées au même serveur en amont. Il s’agit d’une méthode rudimentaire de persistance de session, recalculée chaque fois qu’un serveur tombe en panne ou redevient opérationnel, ou lorsque le groupe de serveurs en amont est modifié ; NGINX Plus offre de meilleures solutions si la persistance de session est nécessaire.

La méthode « Moins de connexions » achemine chaque requête vers le serveur en amont ayant le moins de connexions actives. Cette méthode est particulièrement adaptée au traitement d’un mélange de requêtes rapides et complexes.

Toutes les méthodes de répartition de charge peuvent être ajustées à l’aide d’un paramètre facultatif weight dans la directive server. Cette option est utile lorsque les serveurs ont des capacités de traitement différentes. Dans l’exemple suivant, NGINX dirige quatre fois plus de requêtes vers web-server2 que vers web-server1 :

upstream backend {    zone backend 64k;
    least_conn;

    server web-server1 weight=1;
    server web-server2 weight=4;
}

Dans NGINX, les poids sont gérés indépendamment par chaque processus de travail. NGINX Plus utilise un segment de mémoire partagée pour les données du groupe de serveurs en amont (configuré avec la directive zone), de sorte que les poids sont partagés entre les processus de travail et que le trafic est réparti plus précisément.

Détection des défaillances

Si une erreur ou un délai d’attente survient lorsque NGINX tente de se connecter à un serveur, de lui transmettre une requête ou de lire l’en-tête de la réponse, NGINX retente la requête de connexion avec un autre serveur. (Vous pouvez inclure la directive proxy_next_upstream dans la configuration afin de définir d’autres conditions de nouvelle tentative de la requête.) En outre, NGINX peut retirer le serveur défaillant de l’ensemble des serveurs potentiels et lui envoyer occasionnellement des requêtes afin de détecter son rétablissement. Les paramètres max_fails et fail_timeout de la directive server contrôlent ce comportement.

NGINX Plus ajoute un ensemble de contrôles d’intégrité hors bande qui effectuent des tests HTTP avancés sur chaque serveur en amont afin de déterminer s’il est actif, ainsi qu’un mécanisme de démarrage progressif permettant de réintégrer progressivement les serveurs rétablis dans le groupe avec équilibrage de charge :

server web-server1 slow_start=30s;

Un piège courant : corriger l’en-tête « Host »

Très souvent, un serveur en amont utilise l’en-tête Host de la requête pour déterminer le contenu à fournir. Si le serveur renvoie des erreurs 404 inattendues, ou si tout autre élément laisse penser qu’il ne fournit pas le bon contenu, c’est la première chose à vérifier. Ajoutez ensuite la directive proxy_set_header à la configuration afin de définir la valeur appropriée pour l’en-tête :

location / {
    proxy_pass http://backend;

    # Rewrite the 'Host' header to the value in the client request
    # or primary server name
    proxy_set_header Host $host;

    # Alternatively, put the value in the config:
    #proxy_set_header Host www.example.com;
}

Équilibrage de charge avancé avec NGINX Plus

Grâce à ses nombreuses fonctionnalités avancées, NGINX Plus constitue un répartiteur de charge idéal en amont de groupes de serveurs backend :

Pour en savoir plus sur l’équilibrage de charge avancé et la mise en proxy, consultez l’article qui fait suite à celui-ci, « Équilibrage de charge avec NGINX et NGINX Plus, partie 2 ».

Pour essayer NGINX Plus, commencez votre essai gratuit de 30 jours dès aujourd’hui ou contactez-nous pour discuter de vos cas d’utilisation de l’équilibrage de charge.


Partager

À propos de l’auteur

Owen Garrett
Owen GarrettDirecteur senior de la gestion des produits

Autres articles de Owen Garrett

Articles de blog associés

Tendances actuelles des technologies cloud natives, de l’ingénierie de plateforme et de l’IA
NGINX | 13/10/2025

Tendances actuelles des technologies cloud natives, de l’ingénierie de plateforme et de l’IA

Découvrez les principaux enseignements tirés des réponses à l’enquête annuelle F5 NGINX sur les dernières tendances en matière de technologies cloud natives, de sécurité, d’ingénierie de plateforme et d’IA.

Quels contrôleurs Ingress NGINX sont affectés par les vulnérabilités CVE-2022-4886, CVE-2023-5043 et CVE-2023-5044 ?
NGINX | 03/11/2023

Quels contrôleurs Ingress NGINX sont affectés par les vulnérabilités CVE-2022-4886, CVE-2023-5043 et CVE-2023-5044 ?

Lorsque de nouvelles CVE sont signalées, il est facile de ne plus savoir si elles concernent un outil de contrôleur Ingress NGINX particulier, car il existe plusieurs projets. Cet article présente les CVE et explique comment distinguer les différents projets de contrôleurs Ingress afin de dissiper toute confusion.

Votre API est-elle en temps réel ? Testez sa latence avec l’outil rtapi de NGINX
NGINX | 11/03/2020

Votre API est-elle en temps réel ? Testez sa latence avec l’outil rtapi de NGINX

Votre API répond-elle aux requêtes en moins de 30 ms ? Si ce n’est pas le cas, il ne s’agit pas d’une API en temps réel offrant la faible latence exigée par la grande majorité des organisations. Mesurez la latence de votre API avec l’outil rtapi de NGINX et découvrez comment NGINX peut l’aider à offrir une réactivité en temps réel.

Un testeur d’expressions régulières pour NGINX et NGINX Plus
NGINX | 11/06/2019

Un testeur d’expressions régulières pour NGINX et NGINX Plus

Le testeur d’expressions régulières (regex) pour NGINX et NGINX Plus vous évite de tâtonner en vous indiquant si une expression régulière utilisée dans un bloc location ou map correspond aux valeurs comme prévu. Il génère la configuration appropriée et affiche les valeurs des groupes de capture.

Caches partagés avec les clusters de cache NGINX Plus, partie 1
NGINX | 24/01/2017

Caches partagés avec les clusters de cache NGINX Plus, partie 1

Optimisez la capacité de votre cache web en le répartissant entre plusieurs serveurs de cache web NGINX ou NGINX Plus. Découvrez comment procéder dans cet article.

Introduction aux microservices
NGINX | 19/05/2015

Introduction aux microservices

Les microservices suscitent actuellement beaucoup d’intérêt. Cet article de blog est le premier d’une série de sept consacrée à la conception, au développement et au déploiement de microservices.