モジュール ngx_http_limit_req_module
| 設定例 ディレクティブ limit_req limit_req_dry_run limit_req_log_level limit_req_status limit_req_zone 埋め込み変数 |
ngx_http_limit_req_moduleモジュール (0.7.21) は、定義されたキー(特に、単一のIPアドレスからのリクエスト)ごとにリクエスト処理レートを制限するために使用されます。「リーキーバケット」方式を用いて制限を行います。
設定例
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
...
server {
...
location /search/ {
limit_req zone=one burst=5;
}
ディレクティブ
| 構文 |
limit_req |
|---|---|
| デフォルト | — |
| コンテキスト |
http, server, location |
共有メモリゾーンとリクエストの最大バーストサイズを設定します。リクエストレートがゾーンに対して設定されたレートを超えると、リクエストは定義されたレートで処理されるように遅延されます。過剰なリクエストは、その数が最大バーストサイズを超えるまで遅延され、その場合はエラーでリクエストが終了します。デフォルトでは、最大バーストサイズはゼロです。例えば、以下のディレクティブは
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location /search/ {
limit_req zone=one burst=5;
}
平均して1秒間に1リクエスト以下を許可し、バーストは最大5リクエストに制限します。
リクエストが制限されている間に過剰なリクエストを遅延させたくない場合は、nodelayパラメータを使用してください。
limit_req zone=one burst=5 nodelay;
delayパラメータ (1.15.7) は、過剰なリクエストが遅延し始める制限値を指定します。デフォルト値はゼロです。つまり、すべての過剰なリクエストが遅延されます。
複数のlimit_reqディレクティブを使用できます。例えば、次の設定では、単一のIPアドレスからのリクエスト処理レートと、同時に仮想サーバーによるリクエスト処理レートを制限します。
limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;
limit_req_zone $server_name zone=perserver:10m rate=10r/s;
server {
...
limit_req zone=perip burst=5 nodelay;
limit_req zone=perserver burst=10;
}
これらのディレクティブは、現在のレベルでlimit_reqディレクティブが定義されていない場合に限り、前の設定レベルから継承されます。
| 構文 |
limit_req_dry_run |
|---|---|
| デフォルト |
limit_req_dry_run off; |
| コンテキスト |
http, server, location |
このディレクティブはバージョン1.17.1で追加されました。
ドライランモードを有効にします。このモードでは、リクエスト処理レートは制限されませんが、共有メモリゾーンでは、過剰なリクエストの数は通常どおりカウントされます。
| 構文 |
limit_req_log_level |
|---|---|
| デフォルト |
limit_req_log_level error; |
| コンテキスト |
http, server, location |
このディレクティブはバージョン0.8.18で追加されました。
レート超過によりサーバーがリクエストの処理を拒否した場合、またはリクエスト処理を遅延させた場合のログレベルを設定します。遅延のログレベルは拒否よりも1レベル低くなります。例えば、「limit_req_log_level notice」を指定した場合、遅延はinfoレベルでログに記録されます。
| 構文 |
limit_req_status |
|---|---|
| デフォルト |
limit_req_status 503; |
| コンテキスト |
http, server, location |
このディレクティブはバージョン1.3.15で追加されました。
拒否されたリクエストに対する応答で返すステータスコードを設定します。
| 構文 |
limit_req_zone |
|---|---|
| デフォルト | — |
| コンテキスト |
http |
さまざまなキーの状態を保持する共有メモリゾーンのパラメータを設定します。特に、状態には現在の過剰なリクエスト数が格納されます。keyには、テキスト、変数、およびそれらの組み合わせを含めることができます。キー値が空のリクエストはカウントされません。
バージョン1.7.6より前では、keyには正確に1つの変数を含めることができました。使用例
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
ここでは、状態は10メガバイトのゾーン「one」に保持され、このゾーンのリクエスト処理レートは平均して1秒間に1リクエストを超えることはできません。
クライアントのIPアドレスがキーとして機能します。$remote_addrの代わりに、ここでは$binary_remote_addr変数が使用されています。$binary_remote_addr変数のサイズは、IPv4アドレスの場合は常に4バイト、IPv6アドレスの場合は常に16バイトです。格納された状態は、32ビットプラットフォームでは常に64バイト、64ビットプラットフォームでは常に128バイトを占有します。1メガバイトのゾーンは約1万6千個の64バイトの状態、または約8千個の128バイトの状態を保持できます。
ゾーンストレージが枯渇した場合、最後に使用された状態が削除されます。それでも新しい状態を作成できない場合、リクエストはエラーで終了します。
レートは、1秒あたりのリクエスト数(r/s)で指定されます。1秒あたりのリクエスト数が1未満の場合は、1分あたりのリクエスト数(r/m)で指定されます。例えば、1秒間に0.5リクエストは30r/mです。
syncパラメータ (1.15.3) は、共有メモリゾーンの同期を有効にします。
syncパラメータは、当社の商用サブスクリプションの一部として提供されています。
さらに、当社の商用サブスクリプションの一部として、そのような共有メモリゾーンごとにステータス情報を1.17.7以降、取得またはリセットできます。APIを使用します。
埋め込み変数
$limit_req_status- リクエスト処理レートの制限の結果(1.17.6)を保持します:
PASSED、DELAYED、REJECTED、DELAYED_DRY_RUN、またはREJECTED_DRY_RUN