Objectif
Comprenez les modules ngx_http_limit_conn_module et ngx_http_limit_req_module de Nginx pour contrôler le nombre d'accès aux requêtes.
Tutoriel recommandé : Tutoriel nginx
Modularité Nginx
La structure interne de nginx est composée de modules de base et d'une série de Composé de modules fonctionnels. L'architecture modulaire rend les fonctions de chaque module relativement simples, atteint une cohésion élevée et facilite également l'expansion fonctionnelle de Nginx.
Pour les requêtes Web, tous les modules activés de Nginx formeront une chaîne, similaire aux niveaux d'un jeu révolutionnaire. Chaque module est responsable d'une fonction spécifique, comme le module ngx_http_gzip_module qui implémente la compression, et le module ngx_http_auth_basic_module qui implémente la vérification et le module ngx_http_proxy_module qui implémente le proxy, etc. Les demandes de connexion au serveur seront traitées tour à tour par chaque module de Nginx. Seules les demandes traitées par ces modules seront effectivement transmises au code du programme en arrière-plan pour traitement.
Contrôle d'accès simultané Nginx
Pour les serveurs Web, lorsque vous rencontrez des robots d'exploration Web ou des attaques malveillantes à grand trafic, la mémoire et le processeur du serveur seront également pleins. complet, donc en tant que logiciel d'agent serveur mature, il doit être capable de contrôler ces situations.
Nginx dispose de deux manières de contrôler la simultanéité. L'une consiste à contrôler sa simultanéité via IP ou d'autres paramètres ; l'autre consiste à contrôler le volume total de traitement des requêtes par unité de temps. C'est-à-dire le contrôle de la concurrence et du parallélisme. Ces deux fonctions sont implémentées respectivement par les modules ngx_http_limit_conn_module et ngx_http_limit_req_module.
module ngx_http_limit_conn_module
Description
Ce module est principalement utilisé pour contrôler la quantité de simultanéité des requêtes.
Configuration des paramètres
Quantity limit_conn_zone
Configuration des instructions limit_conn_zone key zone=name:size
Contexte de configuration : http
Description : clé est une variable dans Nginx, généralement $binary_remote_addr | $server_name ; est le nom de la mémoire partagée, la taille est la taille de la mémoire partagée, cette configuration s'appliquera pour un nom d'espace mémoire partagé et enregistrera l'état d'accès de la clé ;
Quantity limit_conn_log_level
Syntaxe : limit_conn_log_level info|notice|warn|error
Valeur par défaut : erreur
Contexte de configuration : http, serveur, emplacement
Description : Lorsque l'accès atteint la limite maximale, l'état de l'accès sera enregistré dans le journal
● limit_conn
Syntaxe : limit_conn zone_name number
Contexte de configuration : http, serveur, emplacement
Description : Utilisez zone_name pour le contrôle de concurrence d'accès. Lorsque le nombre est dépassé, le code d'erreur correspondant est renvoyé
Quantity limit_conn_status
Syntaxe : code limit_conn_status.
Valeur par défaut :503
Contexte de configuration : http, serveur, emplacement
Description : Lorsque l'accès dépasse le nombre limite, le code d'erreur est renvoyé au client. le code d'erreur peut être utilisé avec des paramètres tels que error_page Lors de l'accès Renvoyez une page d'erreur conviviale au client lorsque le quota est dépassé
● limit_rate
Syntaxe : limit_rate rate
Valeur par défaut : 0
Contexte de configuration : http, serveur, emplacement
Description : Limite le débit de chaque lien, le taux représente la vitesse de téléchargement par seconde
Quantity limit_rate_after
Syntaxe : limit_rate_after sizeContexte de configuration : http, serveur, emplacementRemarque : Cette commande fonctionne avec limit_rate Lorsque le trafic dépasse la taille, limit_rate prendra effet.
Exemple de configuration simplelimit_conn_zone $binary_remote_addr zone=addr:10m; server { listen 80; server_name www.domain.com; root /path/; index index.html index.htm; location /ip { limit_conn_status 503; # 超限制后返回的状态码; limit_conn_log_level warn; # 日志记录级别 limit_rate 50; # 带宽限制 limit_conn addr 1; # 控制并发访问 } # 当超过并发访问限制时,返回503错误页面 error_page 503 /503.html; }
module ngx_http_limit_req_module
Description
Ce module contrôle principalement le nombre de requêtes par unité temps. Utilisez l'algorithme « leaky bucket » pour le filtrage. Après avoir défini le taux limite, lorsque le nombre de requêtes par unité de temps dépasse le taux, le module détectera la valeur de rafale. Si la valeur est 0, la requête renverra une erreur basée sur. la configuration delay|nodelay.Ou wait; si burst est supérieur à 0, lorsque le nombre de requêtes est supérieur au taux mais inférieur à burst, la requête entre dans la file d'attente pour traitement. Configuration des paramètresQuantity limit_req_zoneSyntaxe : limit_req_zone key zone=name:size rate=rateContexte de configuration : http Remarque : la clé est une variable dans Nginx, généralement $binary_remote_addr | $server_name ; le nom est le nom de la mémoire partagée, la taille est la taille de la mémoire partagée, le taux est la fréquence d'accès, en r/s, r/m. Cette configuration s'appliquera pour un nom d'espace mémoire partagé et enregistrera l'état d'accès de $key ; Quantity limit_reqSyntaxe : limit_rate zone=name [burst=number] [nodelay|delay=number ] Contexte de configuration : http, serveur, emplacementDescription : Activer les restrictions, burst définit la capacité maximale et nodelay détermine s'il faut attendre le traitement ou renvoyer un code d'erreur lorsque la requête dépasse la limit; Les paramètres de configuration limit_req_log_level et limit_req_status sont cohérents avec le module ngx_http_limit_conn_module Exemple de configuration simplelimit_req_zone $binary_remote_addr zone=req:10m rate=2r/m; server { listen 80; server_name www.domain.com; root /path/; index index.html index.htm; location /limit { limit_req zone=req burst=3 nodelay; } # 当超过并发访问限制时,返回503错误页面 error_page 503 /503.html; }
Remarque
Les deux contrôles d'accès doivent être appliqués pour l'espace mémoire, puisqu'il y a de l'espace mémoire, il y aura bien sûr une situation où la mémoire sera épuisée. À ce moment-là, les nouvelles requêtes renverront une erreur, donc lorsque la limite d'accès est activée, une surveillance est nécessaire pour éviter qu’une telle situation ne se produise.Résumé
Grâce à une brève introduction à l'architecture modulaire de Nginx, concentrez-vous sur la compréhension des fonctions et des paramètres de configuration des modules ngx_http_limit_conn_module et ngx_http_limit_req_module pour obtenir le contrôle simultané des requêtes de Nginx. S'il y a quelque chose qui ne va pas, faites-le moi savoir
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!