Comment limiter le nombre de connexions (demandes) dans Nginx

Comment limiter le nombre de connexions (demandes) dans Nginx

Nginx expédie avec divers modules pour permettre aux utilisateurs de contrôler le trafic vers leurs sites Web, les applications Web, ainsi que d'autres ressources Web. L'une des principales raisons pour 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 moyens principaux de limiter l'utilisation ou le trafic Nginx:

  1. Limiter le nombre de connexions (demandes).
  2. Limiter le taux de demandes.
  3. Limiter 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 discuterons de la façon de limiter le nombre de connexions dans Nginx Pour protéger vos sites Web / applications.

  • Comment limiter le nombre de connexions (demandes) dans nginx - partie 1
  • Comment limiter le taux des connexions (demandes) dans Nginx - Partie 2
  • Comment limiter l'utilisation de la bande passante dans Nginx - Partie 3

Garde en tête que Nginx envisagera une connexion pour limiter uniquement si elle a une demande en cours de traitement par le serveur et que l'ensemble de la demande a déjà été lu. Par conséquent, toutes les connexions du client ne sont pas comptées.

Limitation du nombre de connexions dans nginx

Tout d'abord, vous devez définir une zone de mémoire partagée qui stocke les mesures de connexion pour diverses 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 qui est valide dans le contexte HTTP prend deux paramètres: le clé et le zone (Dans le format Zone_name: taille).

limit_conn_zone $ binary_remote_addr zone = limiteconnbyaddr: 20m; 

Pour définir un code d'état de réponse qui est renvoyé aux demandes rejetées, utilisez le limit_conn_status Directive qui prend un code d'état HTTP comme paramètre. Il est valable dans le HTTP, le serveur et les contextes de localisation.

limit_conn_status 429; 

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

limit_cononn limitConnByAddr 50; 

Voici la configuration complète:

API_SERVICE en amont serveur 127.0.0.1: 9051; serveur 10.1.1.77: 9052;  limit_conn_zone $ binary_remote_addr zone = limiteconnbyaddr: 20m; limit_conn_status 429; Server écouter 80; server_name testapp.Tecmint.com; root / var / www / html / testapp.Tecmint.com / build; Index index.html; limit_cononn limitConnByAddr 50; #include Snippets / Error_Pages.conf; proxy_read_timeout 600; proxy_connect_timeout 600; proxy_send_timeout 600; Emplacement / try_files $ uri $ uri / / index.html = 404 = 403 = 500;  emplacement / 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 mise à niveau $ http_upgrade; proxy_set_header connection "mise à niveau";  
Limiter les connexions Nginx

Enregistrez le fichier et fermez-le.

Alors vérifiez si le Nginx La configuration est très bien en exécutant la commande suivante:

$ sudo nginx -t 

Ensuite, recharger le Nginx Service pour effectuer les changements récents:

$ sudo systemctl recharger 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 comme celle ci-dessous dans le fichier journal d'erreur:

2022/03/20.X.X.X, serveur: testapp.Tecmimt.com, demande: "Get / static / css / Main.63FDEFFF.tronçon.CSS.Carte http / 1.1 ", Hôte:" TestApp.Tecmimt.com " 
Erreur de limite de connexion Nginx

Limiter le nombre de connexions Nginx à l'application

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

API_SERVICE en amont serveur 127.0.0.1: 9051; serveur 10.1.1.77: 9052;  limit_conn_zone $ server_name Zone = limitByservers: 10m; limit_conn_status 429; Server écouter 80; server_name testapp.Tecmint.com; root / var / www / html / testapp.Tecmint.com / build; Index index.html; LIMIT_CONN LIMBLYSERVERS 2000; #include Snippets / Error_Pages.conf; proxy_read_timeout 600; proxy_connect_timeout 600; proxy_send_timeout 600; Emplacement / try_files $ uri $ uri / / index.html = 404 = 403 = 500;  emplacement / 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 mise à niveau $ http_upgrade; proxy_set_header connection "mise à niveau";  

Cette configuration permet Nginx Pour limiter le nombre total de connexions au serveur virtuel alimentant l'application testapp.Tecmint.com, pour 2000 Connexions.

Note: Limiter les connexions basées sur l'IP d'un client a un inconvénient. Vous pouvez finir par restreindre les connexions pour plus d'un seul utilisateur, surtout si de nombreux utilisateurs accédant à votre application sont sur le même réseau et fonctionnent 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 liés à Nginx suivants:

  • Comment créer une page d'erreur 404 personnalisée dans nginx
  • Comment contrôler l'accès en fonction de l'adresse IP du client dans Nginx
  • Comment mettre en cache du contenu dans Nginx
  • Comment activer http / 2.0 en nginx
  • Comment utiliser Nginx comme équilibreur de charge HTTP dans Linux

C'est tout pour le moment! Dans la prochaine partie de cette série, nous discuterons d'une autre technique de gestion du trafic utile dans Nginx - Limiter le taux de demandes. Jusque-là, restez avec nous.