私はnginxのHttpLimitReqModuleを使用してレート制限を検討しています。ただし、リクエストはすべて同じIP(ロードバランサー)から送信され、ヘッダーに実際のIPアドレスが含まれます。
X-Forwarded-For
ソースのIPではなくヘッダーのIPに基づいてnginxレート制限を設定する方法はありますか?
私はnginxのHttpLimitReqModuleを使用してレート制限を検討しています。ただし、リクエストはすべて同じIP(ロードバランサー)から送信され、ヘッダーに実際のIPアドレスが含まれます。
X-Forwarded-For
ソースのIPではなくヘッダーの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;
$binary_remote_addr
変数が正しく設定されます。
このlimit_req_zone
ディレクティブは、リクエストのグループ化のキーとして使用される変数を定義します。
通常は、サイズが小さくスペースを節約するためと$binary_remote_addr
いうよりは、が使用され$remote_addr
ます。
代わりにRealipModuleを使用することもできます。
これにより、リモートアドレス変数がカスタムヘッダーで指定されたアドレスに書き換えられ、ロギングやその他の変数の使用が簡単になります。
$binary_remote_addr
と$remote_addr
一般的に、あなたの構成されたヘッダの値に設定されているX-Forwarded-For
-あなたの標準変数は今、「本当のクライアントのIPアドレス」ですので。実行nginx -V
して、NGINXがでビルドされて--with-http_realip
いるかどうかを確認します。configは次のように簡単です set_real_ip_from 10.0.0.0/8;
real_ip_header X-Forwarded-For;
。CIDRの範囲は、X-Forwarder-For
ヘッダーを設定しているアップストリームロードバランサーの範囲です。