Comment limiter la bande passante réseau dans le serveur Web Nginx

Comment limiter la bande passante réseau dans le serveur Web Nginx

Auparavant, dans notre Nginx Série de gestion du trafic et de contrôles de sécurité, nous avons discuté de la façon de limiter le nombre de connexions que le même client peut établir à vos ressources Web, en utilisant des paramètres d'identification du client tels que l'adresse IP. Nous avons également couvert comment limiter le taux de demandes (limiter le taux auquel un client peut faire des demandes) pour vos ressources Web.

Pour vous assurer que la bande passante d'utilisation de votre application n'est pas dépensée par un seul client, vous devez contrôler les vitesses de téléchargement et de téléchargement par client. C'est un commun Nginx contrôle de sécurité contre Dos (Déni de service) Attaques des utilisateurs malveillants qui essaient simplement d'abuser des performances du site.

Dans cette troisième partie de la série, nous expliquerons comment limiter la bande passante du réseau dans le Nginx serveur Web.

Limiter la bande passante dans nginx

Pour limiter la bande passante dans Nginx, Utilisez le limit_rate directive qui limite le taux de transmission de réponse à un client. Il est valable dans le Http, serveur, emplacement, et Si déclaration dans un emplacement Block, et il spécifie la limite de taux pour un contexte donné en octets par seconde par défaut. Vous pouvez aussi utiliser m pour les mégaoctets ou g pour les gigaoctets.

limit_rate 20k; 

Une autre directive connexe est limit_rate_after, qui spécifie que la connexion ne doit être limitée par taux qu'après une quantité spécifiée de données. Cette directive peut être définie dans le HTTP, le serveur, l'emplacement et «IF Instruction dans un bloc d'emplacement».

limit_rate_after 500k; 

Voici un exemple de configuration pour limiter un client pour télécharger du contenu via une seule connexion à une vitesse maximale de 20 kilobytes par seconde.

API_SERVICE en amont serveur 10.1.1.10: 9051; serveur 10.1.1.77: 9052;  Server écouter 80; server_name testapp.Tecmint.com; root / var / www / html / testapp.Tecmint.com / build; Index index.html; 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";  Emplacement / documents  limit_rate 20k; limit_rate_after 500k;  

Une fois que vous avez ajouté les paramètres requis expliqués ci-dessus, enregistrez les modifications et fermez le fichier. Après, vérifiez si le Nginx La syntaxe de configuration est correcte, comme ainsi:

$ sudo nginx -t 

Si tout va bien, rechargez le Nginx Service pour effectuer les derniers changements:

$ sudo systemctl recharger nginx 

Limiter la bande passante et le nombre de connexions dans nginx

Avec la configuration ci-dessus, le client peut ouvrir plusieurs connexions pour augmenter la bande passante. Par conséquent, en outre, vous pouvez également limiter les connexions par client à l'aide d'un paramètre tel qu'une adresse IP comme nous avons examiné auparavant.

Par exemple, vous pouvez limiter une connexion par adresse IP.

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; Emplacement / try_files $ uri $ uri / / index.html = 404 = 403 = 500;  Emplacement / API  limit_cononn limitConnbyAddr 5; 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";  Emplacement / documents  limit_rate 50k; limit_rate_after 500k; limit_cononn limitConnByAddr 1;  

Limiter la bande passante dynamiquement dans nginx

Comme valeur de paramètre à la limit_rate directive, vous pouvez spécifier des variables pour limiter dynamiquement la bande passante. Il est particulièrement utile dans les situations où le taux doit être limité en fonction d'une certaine condition.

Dans cet exemple, nous utilisons le bloc de carte. Il vous a permis de créer une nouvelle variable dont la valeur dépend des valeurs d'une ou plusieurs des variables d'origine ($ lent et $ limit_rate) spécifié dans le premier paramètre.

API_SERVICE en amont serveur 10.1.1.10: 9051; serveur 10.1.1.77: 9052;  map $ slow $ limit_rate 1 20k; 2 30K;  Server écouter 80; server_name testapp.Tecmint.com; root / var / www / html / testapp.Tecmint.com / build; Index index.html; 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";  Emplacement / documents  limit_rate $ limit_rate; limit_rate_after 500k;  

Voici un autre exemple de configuration pour illustrer la limitation dynamique de la bande passante dans Nginx. Cette configuration permet à Nginx de limiter la bande passante en fonction de la version TLS. La directive limit_rate_after 512 implique le taux de limite après que les en-têtes ont été envoyés.

API_SERVICE en amont serveur 10.1.1.10: 9051; serveur 10.1.1.77: 9052;  map $ ssl_protocol $ réponse_rate "tlsv1.1 "50K;" TLSV1.2 "100K;" TLSV1.3 "500K; Server écouter 443 SSL; SSL_PROTOCOLS TLSV1.1 TLSV1.2 TLSV1.3; ssl_certificate / etc / ssl / testapp.CRT; ssl_certificate_key / etc / ssl / testapp.clé; emplacement / limit_rate $ réponse_rate; # Limite bande passante basée sur la version TLS limite_rate_after 512; proxy_pass http: // api_service;  

C'est tout ce que nous avions pour vous dans cette partie de la série. Nous continuerons à couvrir plus de sujets concernant Nginx Contrôles de gestion du trafic et de sécurité. Mais comme d'habitude, vous pouvez poser des questions ou partager vos réflexions sur ce guide via le formulaire de rétroaction ci-dessous.

Référence: Guide des contrôles de sécurité sur le site Web de Nginx.