現在の制限機能を実現するために一般的に使用されるミドルウェア用のNGINXの公式ドキュメント

公式ドキュメント:http//nginx.org/en/docs/http/ngx_http_limit_req_module.html

モジュール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アドレスからの要求の処理速度。制限は、「リーキーバケット」方式を使用して行われます。

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 zone=name [burst=number] [nodelay | delay=number];
デフォルト:デフォルト
コンテキスト:コンテンツ(スコープの範囲) 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 on | off;
デフォルト:
limit_req_dry_run off;
環境: http、  server、 location

このディレクティブはバージョン1.17.1で登場しました。

このディレクティブはバージョン1.17.1で登場しました

ドライランモードを有効にします。このモードでは、リクエストの処理速度は制限されませんが、共有メモリゾーンでは、通常どおり、過剰なリクエストの数が考慮されます。

ドライランモードを有効にします。このモードでは、リクエストの処理速度に制限はありませんが、共有メモリ領域では、通常どおり過剰なリクエストの数がカウントされます。

構文: limit_req_log_level info | notice | warn | error;
デフォルト:
limit_req_log_level error;
環境: 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 code;
デフォルト:
limit_req_status 503;
環境: http、  server、 location

このディレクティブはバージョン1.3.15で登場しました。

この命令はバージョン1.3.15で登場しました。

拒否されたリクエストに応答して返すステータスコードを設定します。

拒否された要求を設定し、応答ステータスコードを返します。

構文: limit_req_zone key zone=name:size rate=rate [sync];
デフォルト:
環境: 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_addrIPv4アドレスの場合、変数サイズは常に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)を維持します

おすすめ

転載: blog.csdn.net/Coder_Boy_/article/details/110461441