nginx で同時接続リクエストの数を制限する方法

nginx で同時接続リクエストの数を制限する方法

導入

同時接続数を制限するモジュールは http_limit_conn_module です。アドレス: http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html

同時リクエスト数を制限するモジュールは http_limit_req_module です。アドレス: http://nginx.org/en/docs/http/ngx_http_limit_req_module.html

両方のモジュールはデフォルトで Nginx にコンパイルされます。

同時接続数を制限する

構成例:

http {
	limit_conn_zone $binary_remote_addr ゾーン=addr:10m;
  #limit_conn_zone $server_name ゾーン=サーバーあたり:10m;
  
  サーバー{
    limit_conn アドレス 1;
    limit_conn_log_level 警告;
    制限接続ステータス 503;
  }
}

limit_conn_zoneキーzone=name:size;同時接続の設定を定義します

  • 定義可能なモジュールは http モジュールです。
  • キー キーワードは、接続数を制限する変数に基づきます。例では、実際のビジネス ニーズに応じて、binary_remote_addr と $server_name があります。
  • ゾーンは構成名と最大共有メモリを定義します。占有メモリが最大共有メモリを超えると、サーバーはエラーを返します。

例の$binary_remote_addrはバイナリ ユーザー アドレスです。バイナリはバイトを節約し、共有メモリのサイズを縮小するために使用されます。

limit_conn ゾーン番号; 同時接続制限

  • 定義できるモジュールは、http、サーバー、およびロケーションモジュールです。
  • ゾーンはどのlimit_conn_zone設定を使用するかを指定します
  • 数値は接続数の制限です。例の構成では、制限は 1 接続です。

limit_conn_log_level info | notice | warn | error ; 制限が発生したときのログレベル

  • 定義できるモジュールは、http、サーバー、およびロケーションモジュールです。

limit_conn_status コード。制限が発生したときに返されるエラー コード。デフォルトは 503 です。

  • 定義できるモジュールは、http、サーバー、およびロケーションモジュールです。

同時リクエスト数を制限する

limit_req_zone key zone=name:size rate=rate; 同時リクエストを制限するための構成を定義します。

  • 占有メモリが最大共有メモリを超えると、サーバーはエラー応答を返します。
  • レートはリクエストレートを定義します。たとえば、10r/s は 1 秒あたり 10 リクエスト、10r/m は 1 分あたり 10 リクエストです。

limit_req ゾーン=名前 [バースト=数値] [nodelay | 遅延=数値];

  • ゾーンはどのlimit_req_zone設定を使用するかを定義します
  • burst=numberは、バケットが保存できるリクエストの数、つまりリクエストのバッファサイズを設定します。
  • ノードレイバースト バケットの要求はバッファリングされなくなり、直接送信されるため、レート要求レートは無効になります。
  • delay=number 初めてリクエストを受信する場合、number 個のリクエストを事前に配信できます。

limit_req_log_level info | notice | warn | error; 制限が発生したときのログレベル

  • 定義できるモジュールは、http、サーバー、およびロケーションモジュールです。

limit_req_statusコード; 制限が発生した場合のエラー コード

  • 定義できるモジュールは、http、サーバー、およびロケーションモジュールです。

構成例1

http {
  limit_req_zone $binary_remote_addr ゾーン=one:10m レート=1r/s;
  limit_req ゾーン=1 バースト=5;
}

リクエスト レートは 1 秒あたり 1 件のリクエストが配信されます。バースト バケット サイズには 5 つのリクエストを保存できます。制限を超えるリクエストはエラーを返します。

構成例2

http {
  limit_req_zone $binary_remote_addr ゾーン=one:10m レート=1r/s;
  limit_req ゾーン=1 バースト=5 ノードレイ;
}

サンプル構成 2 では、サンプル構成 1 にnodelayオプションが追加されます。そうすると、レート要求レートは役に立たなくなります。バースト バケット内のすべてのリクエストは直接渡されます。制限を超えるリクエストはエラーを返します。

構成例3

http {
  limit_req_zone $binary_remote_addr ゾーン=one:10m レート=1r/s;
  limit_req ゾーン=1 バースト=5 遅延=3;
}

例の構成 3 では、例の構成 1 にdelay=3オプションが追加されます。つまり、最初の 3 つのリクエストはすぐに配信され、残りはリクエスト レートで配信されます。制限を超えるリクエストはエラーを返します。

nginx で同時接続リクエスト数を制限する方法についての記事はこれで終わりです。nginx で同時接続リクエスト数を制限する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Nginx で同時 IP とダウンロード速度を制限する方法
  • Nginx+Lua+Redis は高並列 Web アプリケーションを構築します
  • Nginx の最適化された構成とカーネルの最適化により、100,000 を超える同時接続を実現
  • google-perftools を使用して高同時実行時の nginx パフォーマンスを最適化するチュートリアル (完全版)
  • 同時 IP アクセスを制限し、IP 接続を制限するように nginx と apache を設定する方法
  • Nginxは、同じ期間内の特定のIPへの訪問とリクエストの数を制限します。サンプルコード

<<:  一般的なMysql DDL操作の概要

>>:  よく使われるJavaScript配列メソッド

推薦する

CSS による要素の中央揃えの原理の分析

CSS で要素の水平方向と垂直方向の中心を設定することは、非常に一般的な要件です。しかし、理論的には...

MySQL の FIND_IN_SET() と IN の違いを簡単に分析します

以前、あるプロジェクトでMysql FIND_IN_SET関数を使用したことがありますが、非常に便利...

case when文のエラー問題の詳細な説明

序文MySQL データベースでは、if else のような判断演算を使用することがあります。では、M...

Nginx で Basic Auth ログイン認証を設定する方法

nginx でファイルサーバーを構築することもありますが、これは一般に公開されていますが、サーバーが...

画像とテキストでHTTPヘッダーのあらゆる側面を理解する

HTTPヘッダーとはHTTP は「Hypertext Transfer Protocol」の略です。...

CSS3 で実装された価格表

結果: 実装コードhtml <div id="価格表" class=&qu...

Vue プロジェクトで TS (TypeScript) を使用するための入門チュートリアル

目次1. Typescriptの紹介2. 設定ファイル webpack 設定3. プロジェクトに.t...

MySQL 5.7 の一時テーブルスペースを使用して落とし穴を回避する方法

導入MySQL 5.7 は、SSL/TLS と全体的なセキュリティ開発におけるいくつかの重要な変更に...

MySQL データベースのインストールと Navicat for MySQL の使用に関するチュートリアル

MySQL は、スウェーデンの会社 MySQL AB によって開発され、現在は Oracle が所有...

momentJs を使用してカウントダウン コンポーネントを作成する (サンプル コード)

今日はvueとmomentで作ったカウントダウンを紹介したいと思います。具体的な内容は以下のとおりで...

単一の Nginx IP アドレスに複数の SSL 証明書を設定する例

デフォルトでは、Nginx は IP アドレスごとに 1 つの SSL 証明書のみをサポートします。...

Nginx リバース プロキシを使い始める

目次概要リバースプロキシの役割Nginx リバース プロキシ イントラネット侵入 8081 ポートの...

Windows/Mac で Docker を使用して MySQL (utf8 を含む) をインストールする

目次1. MacへのDockerのインストール2. Win 10 システムでの Docker のイン...

JavaプログラミングでJavaScriptの超実用的なテーブルプラグインを書く

目次効果ドキュメント最初のステップステップ2ステップ3ソースコード効果ドキュメント最初のステップta...

CSS フロート(float, clear)の人気の解説と体験談

私はかなり昔に CSS に触れましたが、フローティングについてはいつも混乱していました。私の理解が浅...