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 で新しいイメージを手動で構築する方法を紹介し、皆さんと共有します。詳細は...

JS addEventListener() およびattachEvent() メソッドは登録イベントを実装します

JavaScript の DOM イベント モデルでは、オブジェクトの addEventListen...

nginx 503 サービスが一時的に利用できない問題を解決する方法

最近、ウェブサイトを更新すると、503 Service Temporarily Unavailabl...

Dockerのデフォルトネットワークセグメントを変更する実装方法の分析

背景同社のサーバーはすべて Alibaba Cloud ECS ホストを購入しています。デフォルトの...

VUE ユニアプリライフサイクルに関する簡単な説明

目次1. アプリケーションライフサイクル2. ページのライフサイクルコンポーネントライフサイクル要約...

Nginx プロキシ使用時にヘッダーに「_」が含まれることで情報が失われる問題の解決方法

序文ゲートウェイプロジェクトを開発する場合、署名 sign_key 情報はリクエスト時にリクエスト ...

Element PlusはAffixを実装します

目次1. コンポーネントの紹介2. ソースコード分析2.1 テンプレート2.2 スクリプト2.3 実...

MySQL 5.6 の「暗黙的な変換」によりインデックスが失敗し、データが不正確になる

背景SQL クエリを実行するときに、where 条件の vachar 型フィールドの単一引用符を削除...

DockerコンテナにRedisをデプロイする手順の紹介

目次1 つの Redis 設定ファイル2 Dockerコマンドの開始3 docker-compose...

Vue3 カプセル化された虫眼鏡コンポーネントのサンプルコード

目次コンポーネントインフラストラクチャ目的: 画像拡大鏡機能を実現するvueuseをインストールする...

MySql5.7.18 の文字セット構成の詳細なグラフィック説明

背景:かなり前(2017.6.5、記事にはタイムリーさがあり、特に使用されているツールは頻繁に更新さ...

CentOS7.5 MySQLのインストールチュートリアル

1. まずシステムにmysqlがインストールされているかどうかを確認します rpm -qa | gr...

シンプルな画像切り替えを実現するJavaScript

この記事では、JavaScriptで簡単な画像切り替えを実現するための具体的なコードを参考までに紹介...

MySQL にテーブルが存在するかどうかを確認し、それを一括で削除する方法

1. インターネットで長時間検索しましたが、判定表が存在するかどうかがわからなかったので、漠然と削除...

UIエンジニアのキャリアについての私たちの考え

私は長い間落ち込んでいます、なぜでしょうか?以前、お客様から、提供されたソフトウェアが正常に動作しな...