web-dev-qa-db-ja.com

X-Forwarded-Forヘッダーによるnginxレート制限

Nginxの HttpLimitReqModule を使用してレート制限を検討しています。ただし、リクエストはすべて同じIP(ロードバランサー)から送信され、ヘッダーには実際のIPアドレスが含まれます。

ソースのIPではなくX-Forwarded-ForヘッダーのIPに基づいてnginxレート制限を設定する方法はありますか?

25
John Brodie

はい、典型的なレート制限構成定義文字列は次のようになります。

 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;
29

limit_req_zoneディレクティブは、リクエストのグループ化のキーとして使用される変数を定義します。
通常、$binary_remote_addrではなく$remote_addrが使用されます。これは、サイズが小さく、スペースを節約できるためです。

あるいは、 RealipModule を使用することもできます。
これにより、リモートアドレス変数がカスタムヘッダーで提供されるアドレスに書き換えられ、ロギングやその他の変数の使用も簡単になります。

5
Lukas