モジュール 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$variablezone=name:size;
埋め込み変数
$limit_conn_status- 接続数の制限の結果を保持します(1.17.6):
PASSED、REJECTED、またはREJECTED_DRY_RUN