モジュール 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 zone number;
デフォルト
コンテキスト httpserverlocation

共有メモリゾーンと、特定のキー値に対する最大許容接続数を設定します。この制限を超えると、サーバーはリクエストへの応答としてエラーを返します。例えば、以下のディレクティブは

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 on | off;
デフォルト
limit_conn_dry_run off;
コンテキスト httpserverlocation

このディレクティブはバージョン1.17.6で追加されました。

ドライランモードを有効にします。このモードでは、接続数は制限されませんが、共有メモリゾーンでは、通常どおり過剰な接続数がカウントされます。

構文 limit_conn_log_level info | notice | warn | error;
デフォルト
limit_conn_log_level error;
コンテキスト httpserverlocation

このディレクティブはバージョン0.8.18で追加されました。

サーバーが接続数を制限する場合のログレベルを設定します。

構文 limit_conn_status code;
デフォルト
limit_conn_status 503;
コンテキスト httpserverlocation

このディレクティブはバージョン1.3.15で追加されました。

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

構文 limit_conn_zone key zone=name:size;
デフォルト
コンテキスト 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 name $variable size;
デフォルト
コンテキスト http

このディレクティブはバージョン1.1.8で非推奨となり、バージョン1.7.6で削除されました。同等のlimit_conn_zoneディレクティブを、変更された構文で使用してください。

limit_conn_zone $variable zone=name:size;

埋め込み変数

$limit_conn_status
接続数の制限の結果を保持します(1.17.6): PASSEDREJECTED、またはREJECTED_DRY_RUN