レート制限された 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