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配列メソッド

推薦する

シェルスクリプトは、Docker の半自動コンパイル、パッケージ化、およびリリースアプリケーション操作を構築します。

Docker 公開方法は、DevOps (送信、コンパイル、パッケージ化、リリースなどの一連のイベ...

CentOS7 から CentOS8 にアップグレードする方法 (詳細な手順)

この記事では、具体的な例を使用して、CentOS 7 から CentOS 8 にアップグレードする方...

Vue で className として空の文字列を使用することはなぜ推奨されないのですか?

目次空の文字列 '' と null を比較するケース1: 空の文字列を使用する &#...

フローティング要素が親要素の高さを崩す原因と解決策の詳細な説明

フローティング要素は、親要素の高さを縮小します。要素を float float:left/right...

Vue が Bibibili のホームページを模倣する際の問題

エンジニアリング構造プロジェクトは2つの部分に分かれています。bilibili-apiはAPIインタ...

Vueはランニングライトのシンプルな効果を実現

この記事では、マーキーのシンプルな効果を実現するためのVueの具体的なコードを参考までに共有します。...

Vue で親子コンポーネントの値を双方向バインドするために v-model を使用するときに発生する問題と解決策

目次シナリオ解決してみる解決するシナリオ今日、コンポーネントの双方向データバインディングにv-mod...

CentOS 8にJenkinsをインストールする方法

CentOS 8 に Jenkins をインストールするには、root アカウントまたは sudo ...

mysql8でルートユーザーのパスワードをリセットする手順を完了します

序文最近、多くの新しい同僚がこの質問をしてきました。特に、homebrew を通じて自動的にインスト...

iviewは動的なフォームとカスタム検証期間の重複を実装します

フォーム項目を動的に追加するiview の動的なフォーム追加は非常に簡単です。フォーム項目を配列に設...

jQuery でダイナミックなパーティクル効果を実現

この記事では、動的なパーティクル効果を実現するためのjQueryの具体的なコードを参考までに紹介しま...

MySQL における exists、in、any の基本的な使い方

【1】存在するループを使用して外部テーブルを 1 つずつクエリし、各クエリの存在する条件ステートメン...

MySQLは複数テーブル関連統計(サブクエリ統計)の例を実装します

この記事では、例を使用して、MySQL で複数テーブルの関連統計を実装する方法について説明します。ご...

Vue3は画像拡大鏡効果を実現します

この記事の例では、画像拡大鏡効果を実現するためのVue3の具体的なコードを参考までに共有しています。...

JSは要素のドラッグとプレースホルダー機能を実装します

このブログ投稿は、ブロガーが数日前に取り組んだプロジェクトで遭遇した困難についてです。これを学んだ後...