モジュール ngx_http_limit_conn_module
設定例 ディレクティブ limit_conn limit_conn_dry_run limit_conn_log_level limit_conn_status limit_conn_zone limit_zone 埋め込み変数 |
ngx_http_limit_conn_module
モジュールは、定義されたキー(特に、単一のIPアドレスからの接続数)ごとに接続数を制限するために使用されます。
すべての接続がカウントされるわけではありません。接続は、サーバーでリクエストが処理中で、リクエストヘッダー全体が既に読み込まれている場合にのみカウントされます。
設定例
http { limit_conn_zone $binary_remote_addr zone=addr:10m; ... server { ... location /download/ { limit_conn addr 1; }
ディレクティブ
構文 |
limit_conn |
---|---|
デフォルト | — |
コンテキスト |
http 、server 、location |
共有メモリゾーンと、特定のキー値に対する最大許容接続数を設定します。この制限を超えると、サーバーはリクエストへの応答としてエラーを返します。例えば、以下のディレクティブは
limit_conn_zone $binary_remote_addr zone=addr:10m; server { location /download/ { limit_conn addr 1; }
一度にIPアドレスごとに1つの接続のみを許可します。
HTTP/2とHTTP/3では、同時実行中の各リクエストは個別の接続とみなされます。
複数のlimit_conn
ディレクティブが存在する可能性があります。例えば、以下の設定は、クライアントIPアドレスごとのサーバーへの接続数と、仮想サーバーへの総接続数を同時に制限します。
limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_name zone=perserver:10m; server { ... limit_conn perip 10; limit_conn perserver 100; }
これらのディレクティブは、現在のレベルでlimit_conn
ディレクティブが定義されていない場合にのみ、前の設定レベルから継承されます。
構文 |
limit_conn_dry_run |
---|---|
デフォルト |
limit_conn_dry_run off; |
コンテキスト |
http 、server 、location |
このディレクティブはバージョン1.17.6で追加されました。
ドライランモードを有効にします。このモードでは、接続数は制限されませんが、共有メモリゾーンでは、通常どおり過剰な接続数がカウントされます。
構文 |
limit_conn_log_level |
---|---|
デフォルト |
limit_conn_log_level error; |
コンテキスト |
http 、server 、location |
このディレクティブはバージョン0.8.18で追加されました。
サーバーが接続数を制限する場合のログレベルを設定します。
構文 |
limit_conn_status |
---|---|
デフォルト |
limit_conn_status 503; |
コンテキスト |
http 、server 、location |
このディレクティブはバージョン1.3.15で追加されました。
拒否されたリクエストに応答として返すステータスコードを設定します。
構文 |
limit_conn_zone |
---|---|
デフォルト | — |
コンテキスト |
http |
さまざまなキーの状態を保持する共有メモリゾーンのパラメータを設定します。具体的には、状態には現在の接続数が含まれます。key
には、テキスト、変数、およびそれらの組み合わせを含めることができます。キー値が空のリクエストはカウントされません。
バージョン1.7.6より前は、key
には正確に1つの変数を含めることができました。
使用例
limit_conn_zone $binary_remote_addr zone=addr:10m;
ここでは、クライアントのIPアドレスがキーとして機能します。$remote_addr
の代わりに、ここでは$binary_remote_addr
変数が使用されていることに注意してください。$remote_addr
変数のサイズは7〜15バイトと変化します。保存された状態は、32ビットプラットフォームでは32バイトまたは64バイトのメモリを占有し、64ビットプラットフォームでは常に64バイトを占有します。$binary_remote_addr
変数のサイズは、IPv4アドレスの場合は常に4バイト、IPv6アドレスの場合は常に16バイトです。保存された状態は、32ビットプラットフォームでは常に32バイトまたは64バイトを占有し、64ビットプラットフォームでは64バイトを占有します。1メガバイトのゾーンは、約32,000個の32バイトの状態、または約16,000個の64バイトの状態を保持できます。ゾーンストレージが使い果たされると、サーバーはそれ以降のリクエストすべてにエラーを返します。
さらに、商用サブスクリプションの一部として、そのような共有メモリゾーンごとのステータス情報は、1.17.7以降、取得またはリセットできます。APIを使用します。
構文 |
limit_zone |
---|---|
デフォルト | — |
コンテキスト |
http |
このディレクティブはバージョン1.1.8で非推奨となり、バージョン1.7.6で削除されました。同等のlimit_conn_zoneディレクティブを、変更された構文で使用してください。
limit_conn_zone
$variable
zone
=name
:size
;
埋め込み変数
$limit_conn_status
- 接続数の制限の結果を保持します(1.17.6):
PASSED
、REJECTED
、またはREJECTED_DRY_RUN