Wie konfiguriere ich nginx so, dass beim Drosseln / Ratenbegrenzung der http-Statuscode 429 (Zu viele Anforderungen) anstelle des Standardcodes 503 (Dienst nicht verfügbar) zurückgegeben wird?
Zu Ihrer Information, ich verwende nginx als Reverse-Proxy mit dem HttpLimitReqModule. Der Entwurf der Spezifikation für den Statuscode 429 lautet RFC6585 .
Diese (geschlossene) Frage zu stackexchanged zeigt, dass die Direktive error_page verwendet werden kann . Ich möchte jedoch keine 429 zurückgeben, wenn tatsächlich ein Serverproblem vorliegt (nicht der Kunde schlägt uns zu sehr) und der Server 503 Service nicht verfügbar zurückgeben sollte.
Irgendwelche Vorschläge?
nginx
http-status-code
adambrod
quelle
quelle
Antworten:
Gute Nachrichten mit Version 1.3.15 http://mailman.nginx.org/pipermail/nginx/2013-March/038306.html
Wir haben die Anweisungen "limit_req_status" und "limit_conn_status". Ich habe sie gerade unter Gentoo Linux getestet (beachten Sie, dass Sie die Module limit_req und limit_con kompilieren müssen).
Mit diesen Einstellungen können Sie meiner Meinung nach das erreichen, wonach Sie gefragt haben:
Ich habe dies mit einem kurzen überprüft:
Bei dem die meisten Anforderungen nach dem Aktivieren der Direktive aufgrund der hohen Anforderungsrate und des konfigurierten Limits in nginx fehlgeschlagen sind:
quelle
ab
ist ein Werkzeug vonapache2-utils
. auf Ubuntu ist esab
aber unter CentOs ist esab2
.Basierend auf der Antwort von VBart und anderen Kommentaren ist klar, dass die beste Option darin besteht, 503 Fehler 429s zuzuordnen.
Da nginx (1.3.x) nur 503 Statuscodes für limit_req und limit_conn verwendet, sollte dies ein guter Ansatz sein.
quelle
Nginx selbst gibt in anderen Fällen als limit_req und limit_conn niemals 503 zurück.
quelle
(proxy/factcgi/scgi/uwsgi)_intercept_errors
aktiviert haben. nginx.org/r/proxy_intercept_errors