Maison > Opération et maintenance > Nginx > Comment limiter la fréquence d'accès par unité de temps dans nginx

Comment limiter la fréquence d'accès par unité de temps dans nginx

WBOY
Libérer: 2023-05-15 13:43:06
avant
828 Les gens l'ont consulté

Tout d'abord, laissez-moi vous dire que j'ai rencontré ce problème car le site a été attaqué et Alibaba Cloud a alerté la police. J'ai pensé à limiter la fréquence d'accès au lieu de limiter les adresses IP (le plan de limitation des adresses IP sera donné plus tard). Le code d'état renvoyé par nginx lorsque les ressources de connexion sont épuisées est 502. Après avoir ajouté les restrictions de cette solution, il renvoie 599, ce qui est différent du code d'état normal.
Les étapes sont les suivantes :

Ajoutez d'abord le contenu suivant à nginx.conf :

map $http_x_forwarded_for  $clientrealip {
    "" $remote_addr;
    ~^(?p<firstaddr>[0-9\.]+),?.*$  $firstaddr;
    }

    ###safe setting to limit the request number per second
    limit_req_status 599;
    limit_req_zone $clientrealip zone=allips:70m rate=5r/s;
Copier après la connexion

La taille du pool de sessions est de 70 m S'il y a de nombreuses IP restreintes, vous pouvez la réduire. S'il y a peu d'IP restreintes, alors. il faut l'augmenter.
5 requêtes par seconde, ceci est également ajusté en fonction de la situation, 5 est plus approprié ou un peu plus grand.

Modifiez ensuite www.xxoo.com.conf (c'est le fichier de configuration de lnmp pour chaque hôte virtuel). Dans le serveur, ajoutez la ligne suivante au dessus de l'emplacement :

limit_req zone=allips burst=5 nodelay;
Copier après la connexion

De cette façon, redémarrez nginx et vous pourrez écrire un script. pour tester la concurrence.

Un script concurrent python est fourni comme suit :

import threading
import time,urllib2


url = &#39;http://sf.gg/&#39;
def worker():
  try:
   response = urllib2.urlopen(url)
   print response.getcode()
  except urllib2.httperror, e:
   print e.code

for i in range(2000):
  t = threading.thread(target=worker)
  t.start()
Copier après la connexion

2000 et http://sf.gg/ peuvent être modifiés, puis exécutez python *.py > , si 599 dit surtout que la limite de fréquence joue un rôle.

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal