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

推薦する

vue3 のさまざまなファイルタイプのプレビュー機能の例

目次序文1. オフィス文書の種類のプレビュー2. PDF形式のプレビュー3. 画像の種類4. ビデオ...

独自のネイティブ JavaScript ルーターを作成する方法

目次序文導入JavaScript 履歴 API独自のネイティブJSルーティングを実装するHistor...

Dockerコンテナでの静的ウェブサイトレイアウトの実装

サーバーの配置数日間無料で使用できるクラウドサーバー(Alibaba Cloud、Huawei Cl...

CSS3で実装されたテキストポップアップ効果

成果を達成する実装コードhtml <div>123WORDPRESS.COM</d...

...

nginx を使用して特定のインターフェース (URL) をブロックする方法

1. はじめに場合によっては、Web プラットフォームがオンラインになった後、サービス インターフェ...

HTML DOCTYPEの略語

DOCTYPE が次のとおりである場合:コードをコピーコードは次のとおりです。 <!DOCTY...

vue.config.js からプロジェクト最適化までの vue2.x 構成

目次序文vue.config.js 構成オプションパッケージサイズを縮小するためのパッケージの最適化...

Linux での mysql-5.7.28 インストール チュートリアル

1. 公式ウェブサイトから Linux バージョンをダウンロードします: https://dev.m...

Mysqlのマージ結果と水平スプライシングフィールドの実装手順

序文最近、レポート機能に取り組んでいたのですが、ある月に各部署に入社した人と退職した人の数をカウント...

HTML タグでの this の使用法の紹介

例えば:コードをコピーコードは次のとおりです。 <html> <ヘッド> &...

Linux での Hbase のインストールと設定のチュートリアル

目次Linux での Hbase のインストールと設定1. Hbaseインストールパッケージをダウン...

MySQL (8 および 5.7) の Docker インストール

この記事では、Dockerを使用してMySQLデータベースとリモートアクセス構成をデプロイする方法を...

Java は Excel から MySQL にデータをインポートします

実際の業務では、Excel からデータベースにデータをインポートする必要がある場合があります。データ...