
Verwenden der Ratenbegrenzung von Nginx am Beispiel dieser Regel:
limit_req_zone $request_limiting_zone_key zone=request_limiting_search:20m rate=30r/m;
Dadurch werden 30 Anfragen pro Minute festgelegt. Was wäre jedoch, wenn ich eine zweite Regel hinzufügen wollte, sodass die Logik lautet: „30 Anfragen pro Minute oder 1 Anfrage pro Sekunde. Je nachdem, was zuerst eintritt.“
Der Grund dafür ist, dass wir immer noch eine Obergrenze von 30/min wollen, aber es gibt einige seltsame Versuche, bei denen wir Spam mit 10 Anfragen in einem Zeitraum von 1-2 Sekunden sehen. Dies führt zu einigen Problemen, wenn Anfragen so schnell eingehen.Deshalb möchten wir die Benutzer auf eine Anfrage pro Sekunde und ein Limit von 30 pro Minute beschränken.
Ich habe die Dokumentreferenz gelesen, konnte dort aber nicht viel über das Stapeln unterschiedlicher Tarifregeln finden.
Ist das möglich? Wenn ja, wie wäre die Syntax?
Antwort1
Es ist völlig zulässig, mehrere Zonen auf denselben Block anzuwenden.Sie können auch mehrere Zonen erstellen, die Anfragen für denselben Schlüssel speichern (normalerweiseein Präfix der Client-IP-Adresse). Es erfordert nur minimale Verarbeitungs- und Speicherkosten.
Im Folgenden werden Benutzer, die durch ihre Netzwerkadresse identifiziert werden, sowohl in Sekunden- als auch in Minutenintervallen begrenzt - und ihnen ermöglicht, das definierte Limit vorübergehend für kurzeplatzt. Sie möchten das zulassen, da Ihre Website dadurch für Benutzer mit unzuverlässigen Eingabegeräten und/oder Netzwerkzugriff weniger fehlerhaft erscheint – sie könnten dieselbe Anfrage zweimal stellen:
map $remote_addr $request_limiting_zone_key {
# [..]
}
limit_req_zone $request_limiting_zone_key zone=request_limit_search_second:10m rate=1r/s;
limit_req_zone $request_limiting_zone_key zone=request_limit_search_minute:10m rate=30r/m;
# [..]
location /search {
limit_req zone=request_limit_search_second burst=3;
limit_req zone=request_limit_search_minute burst=3;
}
Wenn Ihr Webserver jedoch eine kurze Anzahl von Suchanfragen nicht verarbeiten kann, müssen Sie Ihre Suchmaschine möglicherweise auf einen anderen Rechner auslagern oder eine andere Art von Ratenbegrenzung anwenden.Sie benötigen einen erheblichen Spielraum zwischen der typischen menschlichen Nutzung und der Nutzung, die die Leistungsfähigkeit Ihrer Maschinen übersteigtum mitzuhalten. Andernfalls finden Sie möglicherweise keinen sicheren Kompromiss zwischen der Belästigung legitimer Benutzer und der mangelnden Einschränkung missbräuchlicher/Bot-Nutzung.