Probleme mit nginx limit_req rate limiting - Klärung von Dokumenten?

8

Ich habe kein Problem damit, die Geschwindigkeit zu begrenzen, um mit Passagier / Schienen auf nginx zu arbeiten.

Ein Teil der Verwirrung besteht darin, zu unterscheiden, welche Aspekte der Konfiguration pro Client funktionieren und welche globale Grenzen haben.

Ich habe Probleme mit dem richtigen Setup für nginx's limit_req und limit_req_zone configs. Es scheint vage Flop zwischen Sprache zu flippen, was darauf hindeutet, dass dies entweder benutzerspezifisch ist oder global gilt.

In den Dokumenten ist es ziemlich vage, wie die limit_req_zone -Zeile funktioniert. Ist diese "Zone" global oder pro Benutzer? In der folgenden Zeile bin ich in den folgenden Schlussfolgerungen richtig:

%Vor%
  1. $ binary_remote_addr repräsentiert die IP-Adresse eines Benutzers
  2. Diese Darstellung ist besonders vorzuziehen, weil sie weniger Speicherplatz als $ remote_addr benötigt? Warum ist das wichtig oder vorzuziehen?
  3. Die 'Zone' (in diesem Fall) ist mit Darstellungen ihrer IP-Adresse gefüllt ...?
  4. 'Rate' ist die Rate, mit der Anfragen die Warteschlange verlassen dürfen?
  5. Diese "Rate" und "Zone" - sind sie mandantenspezifisch oder global?

Ich bin mir auch nicht sicher über die limit_req-Linie, z. dafür:

%Vor%
  1. Nicht ganz sicher, was platzen bedeutet. Die Dokumente sind auch hier vage. Ich denke, das ist eine Anzahl von Anfragen. Warum Anzahl der Anfragen, wenn der Rest des Anfrage-Systems dieses bizarre "Zonen" -System verwendet?
  2. 'Burst' Anfragen sind per .... welcher Zeitrahmen?
  3. 'nodelay' soll, soweit ich weiß, einen 503-Fehler sofort auslösen, wenn sie andere Anforderungen in der Warteschlange haben, anstatt darauf zu warten, dass die Warteschlange beendet wird. a) Wie lange warten? b) Bedeutet das, dass die 'Burst' Einstellung in diesem Fall ignoriert wird?

Danke.

Einige Hintergrundinformationen für den Fall, dass jemand wirklich gelangweilt ist und sich die Konfigurations- und allgemeinen Probleme ansehen möchte, die wir lösen möchten:

Im Moment habe ich das (Auszug):

%Vor%

Wir haben zwei Zonen definiert:

a) "main_site", entworfen, um alles zu fangen b) "update_request", JS auf dem Client fragt dies über AJAX nach aktualisiertem Inhalt ab, wenn sich ein Zeitstempel in einer kleinen (zwischengespeicherten) Datei ändert

Dies bedeutet natürlich, dass wir für 1 oder 2 Minuten ziemlich wenig Verkehr haben, aber dann einen gewaltigen Anstieg, wenn potenziell 10.000 Clients den Server sofort für diesen aktualisierten Inhalt (der von der DB auf eine etwas andere Weise bedient wird) treffen abhängig von Filtern, Zugriffsberechtigungen usw.)

Wir fanden heraus, dass die Site in Zeiten hoher Last zum Stillstand kam, als die CPU-Kerne ausgereizt waren. Wir hatten einige Bugs in unserem Update-Code, die dazu führten, dass die Abfragen in der Warteschlange aufgingen Wir haben den Server immer wieder heruntergefahren, bis wir die Seite vorübergehend herunterfahren mussten und die Benutzer dazu gezwungen haben, sich abzumelden und ihren Browser zu aktualisieren ... wir haben uns selbst DDoS gemacht: PI denke, dass dies ursprünglich von einigen Konnektivitätsproblemen unserer Hosting-Firma verursacht wurde Büschel von Anfragen, sich im Browser des Benutzers anzumelden.

Während wir die Bugs ausgebügelt haben, warnten wir die Kunden, dass sie die 503-Nachricht "Schwerlast" erhalten könnten oder dass der Inhalt nicht rechtzeitig aktualisiert wird. Die ursprüngliche Absicht der Ratenbegrenzung bestand darin, sicherzustellen, dass die alltäglichen Seiten der Website auch bei hoher Auslastung weiter navigiert werden können, während der aktualisierte Inhalt eingeschränkt wird.

Aber das Hauptproblem, das wir jetzt sehen, ist, dass selbst nachdem die Fehler im Update-Code (hoffentlich) ausgebügelt worden sind, wir nicht wirklich ein gutes Gleichgewicht bei der Ratenbegrenzung finden können. Alles, was wir festgelegt haben, scheint in den Zugriffsprotokollen immer dann eine Anzahl von 503 Fehlern zu erzeugen, wenn ein neuer Inhalt zur Seite hinzugefügt wird (und von unseren Benutzern auf einmal abgerufen wird)

Wir betrachten hier verschiedene Lösungen im Hinblick auf das Caching, aber idealerweise möchten wir immer noch durch eine Art von Ratenbegrenzung geschützt werden, die die Benutzer im täglichen Betrieb nicht beeinträchtigt.

    
do_you_realise 21.10.2014, 08:59
quelle

1 Antwort

11

Welche Dokumente lesen Sie? Ссылка ist ziemlich klar in Bezug auf die Verwendung und Syntax der Direktiven.

Betreffend limit_req_zone :

  1. Ja.
  2. In Ihrem Beispiel ordnen Sie 1 MB Speicherplatz zu, um die Liste der "aktuellen Anzahl übermäßiger Anfragen" zu speichern. Je weniger Platz jeder Artikel / Schlüssel benötigt, desto mehr können Sie speichern. "Wenn der Zonenspeicher erschöpft ist, gibt der Server den Fehler 503 (Service vorübergehend nicht verfügbar) an alle weiteren Anfragen zurück."
  3. Sie müssen im Auge behalten, für welche Kunden die Gebühren begrenzt sein sollten.
  4. Rate ist die maximale Anzahl von Anforderungen, die ein Client in einem bestimmten Zeitraum stellen kann.
  5. Der Kontext für limit_req_zone ist auf http beschränkt und somit global.

Betreffend limit_req :

  1. Sobald ein Kunde das Ratenlimit erreicht hat, kann der Client weiterhin Anfragen stellen; Der Server verzögert jedoch die Verarbeitung (um den Client zu verlangsamen). Wenn der Client weiterhin Anfragen über das Ratenlimit stellt und mindestens burst -Anzahl von Anfragen sendet, wird der Server einfach alle Anfragen fallen lassen (anstatt zu verlangsamen). Man könnte dies verwenden, um DoS-Attacken oder API-Missbrauch abzuwehren.
  2. Burst-Anfragen sind nicht zeitabhängig. Burst tritt nur ein, wenn der Client das Ratenlimit überschritten hat.
  3. nodelay entfernt die Verzögerung für die Verarbeitung von Anforderungen über den burst -Wert. Wenn Sie keine Verarbeitung für Clients mit eingeschränkter Rate durchführen möchten, setzen Sie burst auf 0 und verwenden Sie nodelay . Das Warten / Verzögern für Clients mit eingeschränkter Rate hängt von dem durch limit_req_zone angegebenen Ratenlimit ab.
Clinton Blackburn 23.10.2014, 13:01
quelle

Tags und Links