Nginxの HttpLimitReqModule を使用してレート制限を検討しています。ただし、リクエストはすべて同じIP(ロードバランサー)から送信され、ヘッダーには実際のIPアドレスが含まれます。
ソースのIPではなくX-Forwarded-For
ヘッダーのIPに基づいてnginxレート制限を設定する方法はありますか?
はい、典型的なレート制限構成定義文字列は次のようになります。
limit_req_zone $binary_remote_addr zone=zone:16m rate=1r/s;
ここで、$binary_remote_addr
はリミッターの一意のキーです。 $http_x_forwarded_for
ヘッダーの値を取得するX-Forwarded-For
変数に変更してみてください。ただし、$binary_remote_addr
はIPアドレスを格納するために圧縮バイナリ形式を使用しており、$http_x_forwarded_for
は使用していないため、メモリ消費が増加します。
limit_req_zone $http_x_forwarded_for zone=zone:16m rate=1r/s;
limit_req_zone
ディレクティブは、リクエストのグループ化のキーとして使用される変数を定義します。
通常、$binary_remote_addr
ではなく$remote_addr
が使用されます。これは、サイズが小さく、スペースを節約できるためです。
あるいは、 RealipModule を使用することもできます。
これにより、リモートアドレス変数がカスタムヘッダーで提供されるアドレスに書き換えられ、ロギングやその他の変数の使用も簡単になります。