nginx のレート制限 IP を特定のファイルに記録する

nginx のレート制限 IP を特定のファイルに記録する

レート制限された IP を nginx ノード間で同期する方法を探しています。これらの IP をログに記録し、その後データベースにプッシュして、nginx 構成ファイルでブロックされた IP を更新するエージェントを開発したいと考えています。

429私の課題は、ステータス コードを使用して IP を nginx で制限する方法を見つけることです。

では、レート制限された IP を nginx の特定のファイルに記録することは可能ですか? または、ノード間でレート制限された IP を同期するための他の方法を提案していますか?

答え1

はい、それは可能です。同様の例は、nginx ドキュメント

このaccess_logディレクティブはif=、与えられた変数を評価し、結果が 0 または空の文字列でない場合にのみログに記録するオプションのパラメータも受け取ります。レベルに複数のパラメータを設定できるという事実と組み合わせることでaccess_log、ニーズに応じて異なるログに記録できます。

まず、map地図を作成する必要があります。HTTP 応答ステータス興味のあるものを変数に代入します。ブロックmapの外側に記述する必要があることに注意してくださいserver

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

次に、関連するserverブロックで を宣言しますaccess_log

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

access_logあるレベルでのの出現は、それより上位のレベルのその他のすべての を上書きすることを覚えておいてください。そのため、使用したい上位レベルのディレクティブをコピー (または、より適切な方法としてinclude)する必要があります。access_log

関連情報