Nginxのアクセスボリューム制御の詳細な説明

Nginxのアクセスボリューム制御の詳細な説明

目的

リクエスト アクセス ボリュームを制御するための Nginx ngx_http_limit_conn_module および ngx_http_limit_req_module モジュールを理解します。

Nginx のモジュール性

nginx の内部構造は、コア モジュールと一連の機能モジュールで構成されています。モジュール型アーキテクチャにより、各モジュールの機能が比較的シンプルになり、高い凝集性が実現され、Nginx の機能拡張も容易になります。

Web リクエストの場合、Nginx の有効なすべてのモジュールが、ゲームのレベルと同様にチェーンを形成します。各モジュールは、圧縮用の ngx_http_gzip_module モジュール、認証用の ngx_http_auth_basic_module モジュール、プロキシ用の ngx_http_proxy_module モジュールなど、特定の機能を担当します。サーバーへの接続要求は、各 Nginx モジュールによって順番に処理されます。これらのモジュールによって処理された後にのみ、要求は実際にバックグラウンド プログラム コードに渡され、処理されます。

Nginx 同時アクセス制御

Web サーバーの場合、Web クローラーや悪意のある大容量トラフィック攻撃に遭遇すると、サーバーのメモリと CPU がいっぱいになり、帯域幅もいっぱいになります。そのため、成熟したサーバー プロキシ ソフトウェアとしては、これらの状況を制御できることが必要です。

Nginx で同時実行を制御する方法は 2 つあります。1 つは IP またはその他のパラメータを使用して同時実行を制御する方法、もう 1 つは単位時間あたりに処理されるリクエストの合計数を制御する方法です。つまり、同時実行性と並列処理の制御です。これら 2 つの機能は、それぞれ ngx_http_limit_conn_module モジュールと ngx_http_limit_req_module モジュールによって実装されます。

ngx_http_limit_conn_module モジュール

例示する

このモジュールは主に同時リクエストの数を制御するために使用されます。

パラメータ設定

制限接続ゾーン

コマンド設定 limit_conn_zone キー zone=name:size
構成コンテキスト: http
注: キーはNginxの変数で、通常はbinaryremoteaddr|server_nameです。名前は共有メモリの名前、サイズは共有メモリのサイズです。この設定は共有メモリスペース名に適用され、キーのアクセスステータスを保存します。

制限接続ログレベル

構文: limit_conn_log_level info|notice|warn|error
デフォルト値: エラー
構成コンテキスト: http、サーバー、場所
注意:アクセスが上限に達すると、アクセス状況がログに記録されます

制限接続

構文: limit_conn zone_name number
構成コンテキスト: http、サーバー、場所
注意: アクセス同時実行制御には zone_name を使用します。この数値を超えると、対応するエラー コードが返されます。

制限接続ステータス

構文: limit_conn_status コード
デフォルト値: 503
構成コンテキスト: http、サーバー、場所
説明: アクセスが制限数を超えると、クライアントにエラー コードが返されます。このエラー コードは、error_page などのパラメータとともに使用して、アクセスが制限数を超えたときにクライアントにわかりやすいエラー ページを返すことができます。

制限レート

構文: limit_rate レート
デフォルト値: 0
構成コンテキスト: http、サーバー、場所
説明: 各リンクのレートを制限します。レートは 1 秒あたりのダウンロード速度を示します。

制限レート後

構文: limit_rate_after サイズ
構成コンテキスト: http、サーバー、場所
注意: このコマンドは limit_rate と一緒に使用されます。トラフィックがサイズを超えると、limit_rate が有効になります。

簡単な設定例

limit_conn_zone $binary_remote_addr ゾーン=addr:10m;
サーバー{
  聞く 80;
  サーバー名 www.domain.com;
  ルート /path/;
  インデックス index.html index.htm;
  場所 /ip {
   limit_conn_status 503; # 制限を超えた後に返されるステータス コード。
   limit_conn_log_level warn; # ログレベル limit_rate 50; # 帯域幅制限 limit_conn addr 1; # 同時アクセスの制御}
  # 同時アクセス制限を超えると、503 エラー ページ error_page 503 /503.html が返されます。
}

ngx_http_limit_req_module モジュール

例示する

このモジュールは主に単位時間あたりのリクエスト数を制御します。フィルタリングには「リーキー バケット」アルゴリズムを使用します。制限レートを設定した後、単位時間あたりのリクエスト数がレートを超えると、モジュールはバースト値を検出します。値が 0 の場合、リクエストはエラーを返すか、delay|nodelay 構成に従って待機します。バーストが 0 より大きい場合、リクエスト数がレートより大きくバーストより小さい場合、リクエストは処理待ちキューに入ります。

パラメータ設定

制限要件ゾーン

構文: limit_req_zone key zone=name:size rate=rate
構成コンテキスト: http
注: key は Nginx の変数で、通常は binaryremoteaddr|server_name です。name は共有メモリの名前、size は共有メモリのサイズ、rate はアクセス頻度で、単位は r/s、r/m です。この設定は共有メモリ空間名に適用され、$key のアクセス状態を保存します。

制限要件

構文: limit_rate zone=name [burst=number] [nodelay|delay=number]
構成コンテキスト: http、サーバー、場所
注: 制限を有効にし、バーストの最大容量を設定し、リクエストが制限を超えた場合に処理を待機するか、エラー コードを返すかを決定します。

limit_req_log_level および limit_req_status 構成パラメータは、ngx_http_limit_conn_module モジュールと一致しています。

簡単な設定例

limit_req_zone $binary_remote_addr ゾーン=req:10m レート=2r/m;
サーバー{
  聞く 80;
  サーバー名 www.domain.com;
  ルート /path/;
  インデックス index.html index.htm;
  場所 / 制限 {
   limit_req ゾーン=req バースト=3 ノードレイ;
  }
  # 同時アクセス制限を超えると、503 エラー ページ error_page 503 /503.html が返されます。
}

知らせ

どちらのアクセス制御もメモリ空間の確保が必要です。メモリ空間がある以上、当然メモリが不足する状況が発生します。このとき、新しいリクエストはエラーで返されます。そのため、アクセス制限を有効にする場合は、このような状況が発生しないように監視する必要があります。

まとめ

Nginx のモジュール アーキテクチャを簡単に紹介し、ngx_http_limit_conn_module モジュールと ngx_http_limit_req_module モジュールの機能と構成パラメータを理解することに重点を置き、Nginx のリクエストの同時実行制御を実装します。何か問題があればお知らせください

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Nginx でグレースケールリリースを実装する 3 つの方法の概要
  • Asp.Net Core の公開と展開の詳細な説明 (MacOS + Linux + Nginx)
  • nginx がリリースしたばかりの JavaScript 機能、nginScript の簡単な分析
  • nginx を使用したプロキシ サーバーの設定
  • Docker コンテナのデプロイの試み - マルチコンテナ通信 (node+mongoDB+nginx)
  • Nginx proxy_redirect の使用方法の詳細な説明
  • 指定したディレクトリに nginx をインストールする方法の例
  • Linux システムで IPv6 をサポートするように Nginx を設定する方法
  • VueとNginxをベースにしたフロントエンドとバックエンドのデプロイメントチュートリアルの詳細な説明
  • nginx を使用してカナリアリリースをシミュレートする方法

<<:  Vue+element+oss はフロントエンドのフラグメントアップロードとブレークポイント再開を実現します

>>:  Centos6にMysql5.7をインストールする方法

推薦する

Vueコンポーネント通信のさまざまな方法の詳細な説明

目次1. 父から息子へ2. 息子から父へ3. 親子関係のないコンポーネントの値の転送4. ヴュークス...

フロントエンドHTMLスキン変更機能の実装コード

透明を含む5つの肌の色を変更するには50行のコードが必要です最初にコードをお渡ししますので、ご自身で...

Vue3 のウォッチの使用方法とベストプラクティスガイド

目次序文🌟 1. APIの紹介2. 複数のデータソースの監視3. リスニングアレイ4. 監視対象5....

MySQLクエリキャッシュの簡単な使い方の詳細な説明

目次1. クエリキャッシュの実装プロセス2. クエリキャッシュを構成する3. クエリキャッシュを有効...

進捗バー効果を実現するJavaScript

この記事では、プログレスバー効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...

Nodeはバックエンドの実装手順を素早く構築します

1. まず、node、express、express-generator をインストールします (4...

Dockerコマンドの学習を1つの記事にまとめる

目次導入ミラーリポジトリログイン引く押す検索ローカル画像管理画像rmiタグ建てる歴史保存負荷輸入コン...

MySQL のレイテンシ問題とデータフラッシュ戦略プロセスの分析

目次1. MySQLレプリケーションプロセス2. MySQLの遅延問題の分析3. プロモーション期間...

ティックアニメーション効果を作成するための svg+css または js

以前、上司からログイン後にチェックマークを表示できるプログラムを作るように言われたのですが、Baid...

Dockerコンテナが停止できない問題の解決方法

解決策は次のとおりです。 1. コンテナを強制削除する docker rm -f ジェンキンス2. ...

Linux での中国語入力方法の問題を素早く解決する

背景: 最近、資産報告関連の機能に取り組んでおり、中国語入力をサポートする必要があります。通常のショ...

ドロップダウンメニュー効果を実現するJavaScript

参考までに、JavaScriptを使用してドロップダウンメニューを実装します。具体的な内容は次のとお...

Dockerコンテナ内にkibanaトークナイザーをインストールする方法

ステップ: 1. 仮想マシンディレクトリに新しいdocker-compose.ymlファイルを作成し...

ミニプログラムでマインドマップを描く方法

目次マインドマップとは何ですか? F6で描く方法アリペイ微信要約するマインドマップとは何ですか?マイ...

MYSQL は、指定されたユーザーのランキングとクエリを実装します。ランキング関数 (並列ランキング関数) のサンプルコード

序文この記事は主に、MYSQL でランキングを実現し、指定ユーザーランキング関数 (並列ランキング関...