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 |
---|---|
デフォルト: | - |
コンテキスト: |
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 |
---|---|
デフォルト: |
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
は一つの変数しか含むことができませんでした。
利用例:
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
|
---|---|
デフォルト: | - |
コンテキスト: |
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