Protokollieren von geschwindigkeitsbegrenzten Nginx-IPs in einer bestimmten Datei

Protokollieren von geschwindigkeitsbegrenzten Nginx-IPs in einer bestimmten Datei

Ich suche nach einem Ansatz, um geschwindigkeitsbegrenzte IPs zwischen Nginx-Knoten zu synchronisieren. Ich möchte diese IPs protokollieren und sie anschließend in eine Datenbank übertragen und einen Agenten entwickeln, um blockierte IPs in Nginx-Konfigurationsdateien zu aktualisieren.

429Meine Herausforderung besteht darin, eine Möglichkeit zu finden, Nginx-IPs mit Statuscodes zu begrenzen .

Ist es also möglich, geschwindigkeitsbegrenzte IPs in einer bestimmten Datei in Nginx zu protokollieren, oder schlagen Sie einen anderen Ansatz vor, um geschwindigkeitsbegrenzte IPs zwischen Knoten zu synchronisieren?

Antwort1

Ja, das kann man, und ein ähnliches Beispiel gibt es sogar in derNginx-Dokumentation.

Die access_logDirektive akzeptiert auch einen optionalen if=Parameter, der die ihr übergebenen Variablen auswertet und nur dann protokolliert, wenn das Ergebnis nicht 0 oder eine leere Zeichenfolge ist. In Kombination mit der Tatsache, dass Sie mehr als eine access_login einer Ebene haben können, können Sie je nach Bedarf unterschiedlich protokollieren.

Zunächst benötigen Sie jedoch eine mapKarte derHTTP-AntwortstatusSie interessieren sich für eine Variable. Denken Sie daran, dass diese außerhalb des Blocks mapliegen muss .server

map $status $rate_limited {
    default 0;
    429     1;
}

serverDann deklarieren Sie im entsprechenden Block Ihre access_log.

access_log /var/log/nginx/rate_limited.log combined if=$rate_limited;

Denken Sie daran, dass jedes Vorkommen von access_logauf einer Ebene alle anderen auf höheren Ebenen außer Kraft setzt. Sie sollten daher includedie access_logAnweisungen auf höheren Ebenen, die Sie ebenfalls verwenden möchten, kopieren (oder besser noch ).

verwandte Informationen