公式ドキュメント:http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
モジュールngx_http_limit_req_module
limit_req
|
ngx_http_limit_req_module
モジュール(0.7.21)は、特に定義されたキーごと要求処理速度を制限するために使用され、単一のIPアドレスからの要求の処理速度。制限は、「リーキーバケット」方式を使用して行われます。
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; }
バーストが5リクエストを超えないように、平均して1秒あたり1リクエスト以下を許可します。
リクエストが制限されている間に過剰なリクエストを遅らせることが望ましくない場合は、次のパラメータ
nodelay
を使用する必要があります 。
平均して、1秒あたり1つ以下の要求が許可され、5つ以下の要求がバーストされます。
リクエストを制限しながら過剰なリクエストを遅らせる必要がない場合は、次のnodelay
パラメータを使用する必要があります。
limit_req zone=one burst=5 nodelay;
delay
パラメータ(1.15.7)は、過剰な要求が遅れるとなっ限度を指定します。デフォルト値はゼロです。つまり、過剰なリクエストはすべて遅延します。いくつかの
limit_req
ディレクティブが存在する可能性があり ます。たとえば、次の構成では、単一のIPアドレスからの要求の処理速度が制限されると同時に、仮想サーバーによる要求の処理速度が制限されます。
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
現在のレベルで命令が定義されていない場合にのみ、これらの命令は前の構成レベルから継承されます。
構文: | limit_req_dry_run |
---|---|
デフォルト: | |
環境: | http 、 server 、 location |
このディレクティブはバージョン1.17.1で登場しました。
このディレクティブはバージョン1.17.1で登場しました
ドライランモードを有効にします。このモードでは、リクエストの処理速度は制限されませんが、共有メモリゾーンでは、通常どおり、過剰なリクエストの数が考慮されます。
ドライランモードを有効にします。このモードでは、リクエストの処理速度に制限はありませんが、共有メモリ領域では、通常どおり過剰なリクエストの数がカウントされます。
構文: | limit_req_log_level |
---|---|
デフォルト: | |
環境: | http 、 server 、 location |
このディレクティブはバージョン0.8.18で登場しました。
このディレクティブはバージョン0.8.18で登場しました。
レート超過のためにサーバーがリクエストの処理を拒否した場合、またはリクエストの処理を遅らせた場合に必要なログレベルを設定します。遅延のログレベルは、拒否の場合よりも1ポイント少なくなります。たとえば、「
limit_req_log_level notice
」が指定されている場合、遅延はinfo
レベルとともにログに記録され ます。
サーバーがリクエストの処理を拒否した場合、またはレートを超えたためにリクエストの処理を遅らせた場合に必要なログレベルを設定します。遅延ログレベルは、拒否されたログレベルより1つ少なくなります。たとえば、limit_req_log_level notice
「」を指定すると、遅延ログはそのinfo
レベルになります。
構文: | limit_req_status |
---|---|
デフォルト: | |
環境: | http 、 server 、 location |
このディレクティブはバージョン1.3.15で登場しました。
この命令はバージョン1.3.15で登場しました。
拒否されたリクエストに応答して返すステータスコードを設定します。
拒否された要求を設定し、応答ステータスコードを返します。
構文: | limit_req_zone |
---|---|
デフォルト: | — |
環境: | http |
さまざまなキーの状態を保持する共有メモリゾーンのパラメータを設定します。特に、状態は現在の過剰な要求の数を格納します。に key
は、テキスト、変数、およびそれらの組み合わせを含めることができます。空のキー値を持つリクエストは考慮されません。
さまざまなキーの状態を保持する共有メモリ領域のパラメータを設定します。特に、ステータスには現在の過剰なリクエストの数が保存されます。これにkey
は、テキスト、変数、およびそれらの組み合わせを含めることができます。空のキー値を持つリクエストは考慮されません。
バージョン1.7.6より前では、aに
key
は変数を1つだけ含めることができました。
バージョン1.7.6より前では、
key
1つの変数のみを含む。
使用例:
使用例:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
ここでは、状態は10メガバイトのゾーン「1」に保持され、このゾーンの平均要求処理速度は1秒あたり1要求を超えることはできません。
クライアントのIPアドレスがキーとして機能します。ここでは
$remote_addr
、の 代わりに$binary_remote_addr
変数が使用されていることに注意して ください。$binary_remote_addr
変数のサイズは常にIPv4アドレスの4バイトまたはIPv6アドレスの16バイトです。保存された状態は、32ビットプラットフォームでは常に64バイト、64ビットプラットフォームでは128バイトを占めます。1メガバイトのゾーンは、約16千の64バイト状態または約8000の128バイト状態を保持できます。
ここでは、状態は10メガバイトの領域「 1 」で維持され、この領域の平均要求処理速度は1秒あたり1要求を超えることはできません。
クライアントのIPアドレスがキーとして使用されます。代わりに$remote_addr
、この $binary_remote_addr
変数がここで使用されていることに注意してください。$binary_remote_addr
IPv4アドレスの場合、変数サイズは常に4バイトであり、IPv6アドレスの場合、変数サイズは常に16バイトです。ストレージ状態は、32ビットプラットフォームでは常に64バイト、64ビットプラットフォームでは128バイトを占めます。1メガバイトの領域では、約16,000の64バイト状態または約8,000の128バイト状態を予約できます。
ゾーンストレージが使い果たされると、最も使用頻度の低い状態が削除されます。それでも新しい状態を作成できない場合、リクエストはエラーで終了し ます。
レートは、1秒あたりのリクエスト数(r / s)で指定されます。1秒あたり1リクエスト未満のレートが必要な場合は、1分あたりのリクエスト(r / m)で指定されます。たとえば、1秒あたりのハーフリクエストは30r / mです。
エリアストレージが使い果たされると、最も使用頻度の低い状態が削除されます。この後も新しい状態を作成できない場合、リクエストはエラーで終了します。
レートは、1秒あたりのリクエスト数(r / s)で指定されます。レートを1秒あたり1リクエスト未満にする場合は、1分あたりのリクエスト数(r / m)で指定します。たとえば、1秒あたり0.5リクエストは30r / mです。
sync
パラメータ(1.15.3)が可能と 同期 共有メモリ・ゾーンのを。
sync
パラメータ(1.15.3)は、同期 共有ストレージ領域を有効にします 。
この
sync
パラメーターは、
商用サブスクリプションの
一部として利用でき ます。
さらに、商用サブスクリプションの一部として、APIを使用して、1.17.7以降の各共有ストレージ領域の ステータス情報を取得または リセットできます。
さらに、 商用サブスクリプションの 一部として 、1.17.7以降 、 APIを使用して そのような各共有メモリゾーンの ステータス情報 を 取得 または リセット できます 。
埋め込み変数
埋め込み変数
$limit_req_status
リクエスト処理レート(1.17.6)を制限した結果を保持します。
使用PASSED
、 DELAYED
、 REJECTED
、 DELAYED_DRY_RUN
、又は REJECTED_DRY_RUN
処理速度制限要求結果(1.17.6)を維持します