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をインストールする方法

推薦する

異なるブラウザ間で互換性のあるテキスト配置を実現する CSS

フォームのフロントエンド レイアウトでは、テキスト ボックスのプロンプト テキストを両端に揃える必要...

MySQLはtruncateコマンドを使用してデータベース内のすべてのテーブルを素早くクリアします

1. まずSELECT文を実行して、すべての切り捨て文を生成します。ステートメント形式: selec...

SecureCRT に基づくリモート Linux ホストへのファイルのアップロードとダウンロードのグラフィカルな手順

wget や curl ツールを使用して、Linux サーバーで大規模なネットワーク ファイルを直接...

React refの使用例

目次refとは何かrefの使い方DOM要素に配置するクラスコンポーネントに配置する関数コンポーネント...

SQLベースのクエリステートメント

目次1. 基本的なSELECT文1. 指定されたフィールドをクエリする3. エイリアスを設定する4....

MySQL テーブルとデータベース シャーディングのアプリケーション シナリオと設計方法

多くの友人がフォーラムやメッセージエリアで、どのような状況で MySQL をシャーディングする必要が...

...

開発にVscodeとdockerを組み合わせて使用​​する詳細なプロセス

序文Docker と VS Code を使用すると、ローカル開発環境全体を最適化し、プロジェクトの進...

MySQL 5.7.13 winx64 のインストールと設定方法のグラフィック チュートリアル (win10)

この記事では、参考までにMySQL 5.7.13 winx64のインストールと設定方法のグラフィック...

MySQLデータベースのマスタースレーブレプリケーションの原理と機能の分析

目次1. データベースのマスター/スレーブ分類: 2. MySQL マスタースレーブの紹介3. マス...

zabbix を使用して ogg プロセスを監視する (Linux プラットフォーム)

以前作成されたデータベースの ogg プロセスは、発見されるまでの約半月間ダウンしていました。起動で...

Linux SecureCRT の文字化けの解決方法

SecureCRT が文字化けした文字を表示する状況を見てみましょう。例えば: ではリセットしてみま...

Vue の新しいパートナー TypeScript クイックスタート実践記録

目次1. 公式の足場を使って構築する2. プロジェクトディレクトリ分析3. TypeScript の...

MySQL のテーブルリターンとインデックスカバレッジの例の詳細な説明

目次インデックスタイプインデックス構造非クラスター化インデックスクエリインデックスカバー要約するイン...

ウェブページデザインのための4つの実践的なヒント

関連記事: Web コンテンツ ページを作成するための 9 つの実用的なヒント<br />...