Dans notre dernier article qui fait partie de notre série sur la gestion du trafic NGINX, nous avons expliqué comment limiter le nombre de connexions dans NGINX. Dans ce guide, nous verrons comment limiter le taux de demandes dans NGINX.

La limitation de débit est une technique de gestion du trafic utilisée pour restreindre le nombre de HTTP demandes qu’un client peut faire dans un laps de temps donné – les limites de taux sont calculées en Requêtes par seconde (ou alors RPS).

Un exemple de demande est un AVOIR demande de la page de connexion d’une application ou d’un PUBLIER demande sur un formulaire de connexion ou un PUBLIER sur un API point final.

Il existe de nombreuses raisons de limiter le taux de requêtes vers vos applications web ou services API, l’une étant la sécurité : se protéger contre les requêtes rapides abusives.

Limitation du taux de connexions dans NGINX

Commencez par définir les paramètres de limitation de débit à l’aide de la limit_req_zone directif. Les paramètres requis sont une clé pour identifier les clients, une zone de mémoire partagée qui stockera l’état de la clé et la fréquence à laquelle elle a accédé à une URL restreinte à la demande, et le débit.

Publicité

Le limit_req_zone est valide dans le contexte HTTP.

limit_req_zone $binary_remote_addr zone=limitreqsbyaddr:20m rate=10r/s;

Définissez également un code d’état de réponse qui est renvoyé aux demandes rejetées, à l’aide de la limit_req_status qui est valide dans les contextes HTTP, serveur et emplacement.

limit_req_status 429;

Vous pouvez maintenant utiliser le limint_conn pour activer la limitation du débit des demandes dans les contextes HTTP, de serveur et d’emplacement. Il prend une zone mémoire en paramètre et d’autres paramètres optionnels.

limit_req zone=limitreqsbyaddr;

L’exemple de configuration suivant montre comment limiter le taux de demande à une API d’application Web. La taille de la mémoire partagée est de 20 Mo et la limite du taux de requêtes est de 10 requêtes par seconde.

upstream api_service {
    server 127.0.0.1:9051;
    server 10.1.1.77:9052;
}
limit_req_zone $binary_remote_addr zone=limitreqsbyaddr:20m rate=10r/s;
limit_req_status 429;

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

    #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 {
        limit_req zone=limitregsbyaddr;
        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";

       
   }
}

Enregistrez votre fichier de configuration et fermez-le.

Vérifiez ensuite si le NGINX la syntaxe de configuration est correcte à l’aide de la commande suivante :

$ sudo nginx -t

Après cela, rechargez le NGINX service applique les dernières modifications :

$ sudo systemctl reload nginx

Une fois la limite de taux de dix requêtes par seconde est dépassée par un seul client accédant /api/NGINX renvoie un « 429 Trop de demandes” erreur au client.

Nginx 429 Trop De Requêtes Erreur
Nginx 429 Trop De Requêtes Erreur

Il enregistre également l’incident dans le journal des erreurs.

2022/04/29 00:30:38 [error] 3145846#0: *131039 limiting requests, excess: 0.990 by zone "limitreqsbyaddr", client: 192.168.1.10, server: testapp.tecmint.com, request: "GET /api/v1/app/meta-data HTTP/1.1", host: "testapp.tecmint.com", referrer: "https://testapp.tecmint.com/"
Journaux D'Erreurs Nginx
Journaux D&Rsquo;Erreurs Nginx

Parfois, selon la nature de votre application ou de votre API, un client devra faire plusieurs requêtes en même temps, puis réduire son débit pendant un certain temps avant d’en faire d’autres. NGINX peut également mettre en mémoire tampon toutes les demandes excédentaires dans une file d’attente et les traiter rapidement.

Vous pouvez activer ce comportement dans la limitation de débit à l’aide de la burst paramètre avec le limit_req directif. Pour activer la mise en file d’attente sans délai, ajoutez le nodelay paramètre.

limit_req zone=limitregsbyaddr burst=20 nodelay;

Il y a un hic avec la limitation de débit basée sur l’adresse IP d’un client, en particulier pour les utilisateurs accédant à votre application à partir du même réseau et fonctionnant derrière un NAT. Dans ce cas, toutes leurs requêtes proviendront de la même adresse IP. Dans un tel scénario, vous pouvez utiliser d’autres variables pour identifier les clients, comme un cookie de session.

Pour plus d’informations sur la limitation du taux de demandes, consultez ce Limitation du débit NGINX sur le site NGINX. Ensuite, nous verrons comment limiter l’utilisation de la bande passante dans NGINX.

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édentLe restaurant Llandudno est « le premier au Pays de Galles » à accepter la crypto-monnaie pour payer un repas
Article suivantProchaine aubaine du créateur de Bored Ape : vendre des terres dans un métaverse « ouvert »
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