NGINX est livré avec divers modules pour permettre aux utilisateurs de contrôler le trafic vers leurs sites Web, leurs applications Web, ainsi que d’autres ressources Web. L’une des principales raisons de limiter le trafic ou l’accès est d’empêcher les abus ou les attaques de certains types tels que DoS (Déni de service) attaques.

Il existe trois façons principales de limiter l’utilisation ou le trafic dans NGINX:

  1. Limitation du nombre de connexions (requêtes).
  2. Limiter le taux de demandes.
  3. Limitation de la bande passante.

Ce qui précède NGINX Les approches de gestion du trafic, selon le cas d’utilisation, peuvent être configurées pour limiter en fonction d’une clé définie, la plus courante étant l’adresse IP d’un client. NGINX prend également en charge d’autres variables telles qu’un cookie de session et bien d’autres.

Dans cette première partie de notre série en trois parties, nous verrons comment limiter le nombre de connexions dans NGINX pour protéger vos sites Web/applications.

  • Comment limiter le nombre de connexions (requêtes) dans NGINX – Partie 1
  • Comment limiter le taux de connexions (requêtes) dans NGINX – Partie 2
  • Comment limiter l’utilisation de la bande passante dans NGINX – Partie 3

Garde en tête que NGINX considérera une connexion pour limitation uniquement si une demande est en cours de traitement par le serveur et que l’en-tête de la demande a déjà été lu. Par conséquent, toutes les connexions client ne sont pas comptabilisées.

Publicité

Limitation du nombre de connexions dans NGINX

Tout d’abord, vous devez définir une zone de mémoire partagée qui stocke les métriques de connexion pour différentes clés, en utilisant le limit_conn_zone directif. Comme mentionné précédemment, une clé peut être un texte, une variable telle que l’adresse IP distante d’un client ou une combinaison des deux.

Cette directive valide dans le contexte HTTP prend deux paramètres : le clé et le zone (au format nom_zone:taille).

limit_conn_zone $binary_remote_addr zone=limitconnbyaddr:20m;

Pour définir un code d’état de réponse qui est renvoyé aux demandes rejetées, utilisez le limit_conn_status qui prend un code d’état HTTP en paramètre. Il est valide dans les contextes HTTP, de serveur et d’emplacement.

limit_conn_status 429;

Pour limiter les connexions, utilisez le limite_conn directive pour définir la zone de mémoire à utiliser et le nombre maximal de connexions autorisées, comme indiqué dans l’extrait de configuration suivant. Cette directive est valide dans les contextes HTTP, de serveur et d’emplacement.

limit_conn   limitconnbyaddr  50;

Voici la configuration complète :

upstream api_service {
    server 127.0.0.1:9051;
    server 10.1.1.77:9052;
}
limit_conn_zone $binary_remote_addr zone=limitconnbyaddr:20m;
limit_conn_status 429;

server {
    listen 80;
    server_name testapp.tecmint.com;
    root /var/www/html/testapp.tecmint.com/build;
    index index.html;

    limit_conn   limitconnbyaddr  50;

    #include snippets/error_pages.conf;
    proxy_read_timeout 600;
    proxy_connect_timeout 600;
    proxy_send_timeout 600;
    location / {
        try_files $uri $uri/ /index.html =404 =403 =500;
    }
    location /api {
        proxy_pass http://api_service;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
   }
}
Limiter Les Connexions Nginx
Limiter Les Connexions Nginx

Enregistrez le fichier et fermez-le.

Vérifiez ensuite si le NGINX la configuration est correcte en exécutant la commande suivante :

$ sudo nginx -t

Ensuite, rechargez le NGINX service pour effectuer les modifications récentes :

$ sudo systemctl reload nginx

Vérification de la limite de connexion Nginx

Lorsqu’un client dépasse le nombre maximum de connexions autorisées, NGINX renvoie un « 429 Trop de demandes” erreur au client et enregistre une entrée telle que celle ci-dessous dans le fichier journal des erreurs :

2022/03/15 00:14:00 [error] 597443#0: *127 limiting connections by zone "limitconnbyaddr", client: x.x.x.x, server: testapp.tecmimt.com, request: "GET /static/css/main.63fdefff.chunk.css.map HTTP/1.1", host: "testapp.tecmimt.com"
Erreur De Limite De Connexion Nginx
Erreur De Limite De Connexion Nginx

Limitation du nombre de connexions Nginx à l’application

Vous pouvez également limiter le nombre de connexions pour un serveur donné en utilisant le $nom_serveur variable:

upstream api_service {
    server 127.0.0.1:9051;
    server 10.1.1.77:9052;
}
limit_conn_zone $server_name zone=limitbyservers:10m;
limit_conn_status 429;

server {
    listen 80;
    server_name testapp.tecmint.com;
    root /var/www/html/testapp.tecmint.com/build;
    index index.html;

     limit_conn  limitbyservers  2000;

    #include snippets/error_pages.conf;
    proxy_read_timeout 600;
    proxy_connect_timeout 600;
    proxy_send_timeout 600;
    location / {
        try_files $uri $uri/ /index.html =404 =403 =500;
    }
    location /api {
        proxy_pass http://api_service;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
   }
}

Cette configuration permet NGINX pour limiter le nombre total de connexions au serveur virtuel alimentant l’application testapp.tecmint.compour 2000 Connexions.

Noter: Limiter les connexions en fonction de l’adresse IP d’un client a un inconvénient. Vous risquez de restreindre les connexions de plusieurs utilisateurs, en particulier si de nombreux utilisateurs accédant à votre application se trouvent sur le même réseau et opèrent derrière un NAT – toutes leurs connexions proviendront de la même adresse IP.

Dans un tel scénario, vous pouvez utiliser une ou plusieurs variables disponibles dans NGINX qui peuvent identifier un client au niveau de l’application, un exemple est un cookie de session.

Vous pourriez également aimer les articles suivants liés à Nginx :

C’est tout pour le moment! Dans la prochaine partie de cette série, nous aborderons une autre technique utile de gestion du trafic dans NGINX – limiter le taux de demandes. Jusque-là, restez avec nous.

Si vous appréciez ce que nous faisons ici sur TecMint, vous devriez considérer :

TecMint est le site communautaire à la croissance la plus rapide et le plus fiable pour tout type d’articles, de guides et de livres Linux sur le Web. Des millions de personnes visitent TecMint ! pour rechercher ou parcourir les milliers d’articles publiés accessibles GRATUITEMENT à tous.

Si vous aimez ce que vous lisez, pensez à nous acheter un café (ou 2) en signe d’appréciation.

Soutenez-Nous

Nous sommes reconnaissants pour votre soutien sans fin.

Rate this post
Publicité
Article précédentAbundance Coin annonce une offre de 50 millions de dollars américains en crypto-monnaie
Article suivantLe métaverse pourrait être la prochaine frontière du commerce électronique
Avatar De Violette Laurent
Violette Laurent est une blogueuse tech nantaise diplômée en communication de masse et douée pour l'écriture. Elle est la rédactrice en chef de fr.techtribune.net. Les sujets de prédilection de Violette sont la technologie et la cryptographie. Elle est également une grande fan d'Anime et de Manga.

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici