Maison  >  Article  >  Opération et maintenance  >  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
WBOYavant
2023-05-15 13:43:06769parcourir

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;

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;

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()

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer