ngx_http_limit_conn_module モジュール

設定例
ディレクティブ
     limit_conn
     limit_conn_dry_run
     limit_conn_log_level
     limit_conn_status
     limit_conn_zone
     limit_zone
Embedded Variables

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;
デフォルト: -
コンテキスト: http, server, location

共有メモリ領域と、指定されたキーに許可された接続の最大数を設定します。この制限を越えると、サーバはリクエストの応答の中でerror を返すでしょう。例えば、次のディレクティブは、

limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
    location /download/ {
        limit_conn addr 1;
    }

は、一度にIPアドレスごとに一つの接続を許可します。

HTTP/2とSPDYでは、同時に起こる各リクエストは別個の接続と見なされます。

いくつかの 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;
コンテキスト: http, server, location

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

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

構文: limit_conn_log_level info | notice | warn | error;
デフォルト:
limit_conn_log_level error;
コンテキスト: http, server, location

このディレクティブはバージョン0.8.18から導入されました。

サーバが接続数を制限したことを記録するのが望ましいレベルを設定します。

構文: limit_conn_status code;
デフォルト:
limit_conn_status 503;
コンテキスト: http, server, location

このディレクティブはバージョン1.3.15から導入されました。

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

構文: limit_conn_zone key zone=name:size;
デフォルト: -
コンテキスト: http

様々なキーに対してステータスを保持する共有メモリ領域のパラメータを設定します。特に、ステータスには現在の接続数が含まれます。key には、文字列、変数、およびそれらの組み合わせを含めることができます。空のキーの値のリクエストは考慮されません。

バージョン1.7.6以前は、key は一つの変数しか含むことができませんでした。

利用例:

limit_conn_zone $binary_remote_addr zone=addr:10m;

ここで、クライアントIPアドレスがキーとして役に立ちます。$remote_addrの代わりに$binary_remote_addr 変数がここでは使われていることに注意してください。$remote_addr変数のサイズは7から15バイトまで変わります。保持された状況は32-bitプラットフォーム上では32または64バイトのメモリを占有し、64-bitプラットフォーム上では常に64バイトを占有します。$binary_remote_addr変数のサイズは、IPv4アドレスの場合は4バイトで、IPv6アドレスの場合は常に6です。保持された状況は32-bitプラットフォーム上では常に32バイトを占有し、64-bitプラットフォーム上では常に64バイトを占有します。一メガバイトの領域は約32,000個の32-byteの状況、あるいは約16,000個の64-byteの状況を保持することができます。領域の保管場所が使い尽くされると、サーバはそれ以上のリクエストに対してerrorを返すでしょう。

さらに、商用サブスクリプションの一部として、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): PASSEDREJECTEDREJECTED_DRY_RUN

TOP
inserted by FC2 system