Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So begrenzen Sie die Zugriffshäufigkeit pro Zeiteinheit in Nginx

So begrenzen Sie die Zugriffshäufigkeit pro Zeiteinheit in Nginx

WBOY
WBOYnach vorne
2023-05-15 13:43:06769Durchsuche

Zunächst möchte ich sagen, dass ich auf dieses Problem gestoßen bin, weil die Website angegriffen wurde und Alibaba Cloud die Polizei alarmiert hat. Ich dachte darüber nach, die Zugriffshäufigkeit zu begrenzen, anstatt die IP-Adressen zu begrenzen (der Plan zur Beschränkung der IP-Adressen wird später bekannt gegeben). Wenn die Verbindungsressourcen erschöpft sind, gibt Nginx den Statuscode 502 zurück. Nach dem Hinzufügen der Einschränkungen dieser Lösung wird 599 zurückgegeben, was sich vom normalen Statuscode unterscheidet.
Die Schritte sind wie folgt:

Fügen Sie zunächst den folgenden Inhalt zu nginx.conf hinzu:

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;

Die Sitzungspoolgröße beträgt 70 m. Wenn es nur wenige eingeschränkte IPs gibt, können Sie sie verkleinern Sie müssen es erhöhen
5 Anfragen pro Sekunde, dies wird auch je nach Situation angepasst, 5 ist angemessener oder etwas größer.

Ändern Sie dann www.xxoo.com.conf (dies ist die Konfigurationsdatei von lnmp für jeden virtuellen Host). Fügen Sie auf dem Server die folgende Zeile über dem Speicherort hinzu:

limit_req zone=allips burst=5 nodelay;

Starten Sie auf diese Weise nginx neu und Sie können ein Skript schreiben um die Parallelität zu testen.

Ein gleichzeitiges Python-Skript wird wie folgt bereitgestellt:

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

Sowohl 2000 als auch http://sf.gg/ können geändert werden. Führen Sie dann Python *.py > aus, um die Verteilung der Statuscodes in der Out-Datei zu analysieren , wenn 599 insbesondere sagt, dass die Frequenzgrenze eine Rolle spielt.

Das obige ist der detaillierte Inhalt vonSo begrenzen Sie die Zugriffshäufigkeit pro Zeiteinheit in Nginx. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen