Nginx リクエスト制限の設定方法

Nginx リクエスト制限の設定方法

Nginx は、多くの優れた機能を備えた強力で高性能な Web およびリバース プロキシ サーバーです。
同時接続数が多い場合、Nginx は Apache サービスの優れた代替手段です。Nginx は、米国の仮想ホスティング ビジネスの経営者がよく選択するソフトウェア プラットフォームの 1 つです。 Nginx が開発モデルとして epoll と kqueue を選択したことにより、最大 50,000 の同時接続の応答をサポートできるようになりました。

1. Nginx リクエスト制限

  • limit_conn_module 接続頻度の制限
  • limit_req_module リクエスト頻度制限

2. HTTPプロトコルの接続とリクエスト

1. HTTPプロトコル接続とリクエストの概念

  • HTTP リクエストは TCP 接続に基づいています。HTTP リクエストを完了するには、TCP の 3 ウェイ ハンドシェイクが必要です。
  • HTTP リクエストは TCP 接続に基づいて確立されます。1 つの TCP リクエストから少なくとも 1 つの HTTP リクエストが生成されます。

2. HTTPプロトコル接続とリクエストの図

ここに画像の説明を挿入

3. HTTPプロトコル接続とリクエストバージョンの関係

HTTP プロトコル バージョン接続関係
1.0 のTCPは再利用できない
1.1 のシーケンシャルTCP多重化
HTTP2.0多重化 TCP多重化

3. Nginx接続制限の設定構文

1. limit_conn_zoneの設定構文

  • 構文: limit_conn_zone key zone=name:size; limit_conn_zone は、要求された接続ストレージ領域を示します。キーは、どの接続がキー付きであるかを示します。たとえば、クライアントの IP がキーとして使用される場合、制限はクライアントの IP に適用されます。 zone=name は、適用されるストレージ スペースの名前を示します。サイズは要求されたストレージスペースのサイズを示します
  • デフォルト: —— デフォルトでは設定がないことを示します
  • コンテキスト: httpはhttpブロックで設定する必要があることを意味します

2. limit_connの設定構文

  • 構文: limit_conn ゾーン番号。ゾーンは limit_conn_zone で適用されるストレージ スペースの名前を示し、番号は同時要求の制限、つまり同時に制限される接続数を示します。
  • デフォルト: —— デフォルトでは設定がないことを示します
  • コンテキスト: http、server、location は、http ブロック、server ブロック、または location ブロックで構成を行う必要があることを意味します。

4. Nginxリクエスト制限の設定構文

1. limit_req_zoneの設定構文

  • 構文: limit_req_zone key zone=name:size rate=rate; limit_req_zone は、要求された接続ストレージ領域を示します。キーは、どの接続がキー付きであるかを示します。たとえば、クライアントの IP がキーとして使用される場合、制限はクライアントの IP に適用されます。 zone=name は、適用されるストレージ スペースの名前を示します。 size は要求されたストレージスペースのサイズを示します。レートはリクエストの制限を示し、制限単位(秒単位)を参照します。
  • デフォルト: —— デフォルトでは設定がないことを示します
  • コンテキスト: httpはhttpブロックで設定する必要があることを意味します

2. limit_reqの設定構文

  • 構文: limit_req zone=name [burst = number] [nodelay]; zone=name は、limit_req_zone で要求されたストレージ スペースの名前を示します。burst = number は、設定されたレートを超えた後、残りの要求数が次の 1 秒間に実行されることを示します。
  • デフォルト: —— デフォルトでは設定がないことを示します
  • コンテキスト: http、server、location は、http ブロック、server ブロック、または location ブロックで構成を行う必要があることを意味します。

5. Nginxリクエスト制限の設定デモンストレーション

1. まず、submodule.html ページを作成し、それを /opt/app/html ディレクトリにアップロードします。これにより、sub_module モジュールのコンパイル パラメータを設定してから、/opt/app/html ディレクトリの submodule.html ページにアクセスして、置き換えられたコンテンツを表示できます。

submodule.html ページ

<html>
	<ヘッド>
		<メタ文字セット="utf-8">
		<title>サブモジュール</title>
	</head>
	<本文>
		<a>html</a></br>
		<a>xml</a></br>
		<a>json</a></br>
		<a>xml</a></br>
		<a>jsp</a></br>
		<a>html</a>
	</本文>
</html>

ブラウザアクセスは以下のとおりです

ここに画像の説明を挿入

2. nginx.conf設定ファイルを編集する

[root@localhost /]# vim /etc/nginx/nginx.conf 

ここに画像の説明を挿入

3. httpブロックに次の設定を追加します。

#$binary_remote_addr はクライアントのアドレスを表します。
#zone=req_zone は、同じクライアント アドレスによって開始された要求のストレージ スペース名を示します。#1r/s は、1 秒あたり 1 回の limit_req_zone を示します。$binary_remote_addr zone=req_zone:1m rate=1r/s; 

ここに画像の説明を挿入

4. httpブロックのlocationブロックに次の設定を追加します。

#nginx接続リクエスト制限の設定 location / {
    ルート /opt/app/html;
    limit_reqゾーン=req_zone;
} 

ここに画像の説明を挿入

5. 変更された設定ファイルが正しいかどうかを確認します。「成功」というメッセージが返された場合は、設定ファイルが正しく変更されたことを意味します。それ以外の場合は、構成ファイルの構文を確認してください。

ここに画像の説明を挿入

6. 設定ファイルを再読み込みする

[root@localhost /]# systemctl reload nginx 

ここに画像の説明を挿入

7. 同時リクエストを行うには、abストレステストツールを使用します。

腹筋ストレステストツールのインストールについては、このブログ投稿リンクを参照してください: https://wwwxz.blog.csdn.net/article/details/118584751

#-n は開始されたリクエストの数を示し、-c は同時リクエストの数を示します [root@localhost ~]# ab -n 20 -c 10 http://localhost/submodule.html 

ここに画像の説明を挿入

nginx リクエスト制限の設定方法についてはこれで終わりです。nginx リクエスト制限の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Nginx の http リソース リクエスト制限の詳細な説明 (3 つの方法)
  • nginx のリクエスト制限(接続制限とリクエスト制限)の詳細な説明
  • Nginx のリクエスト制限とアクセス制御の実装に関する簡単な説明
  • nginx プロキシ傍受リクエストによるグローバルアクセス制限
  • Nginxは、同じ期間内の特定のIPへの訪問とリクエストの数を制限します。サンプルコード
  • Nginx サーバーで接続とリクエストの数を制限するモジュールを構成する方法に関するチュートリアル

<<:  MySQL 外部キー制約とテーブル関係の概要

>>:  CSSアニメーションによるテーブルスクロールカルーセル効果の実装

推薦する

MySQL マルチバージョン同時実行制御 MVCC の実装

目次MVCCとはMVCC 実装MVCC はファントム リードを解決しますか? MVCCとはMVCC ...

Vueリストレンダリングキーの原理と機能の詳細な説明

目次リストレンダリングキーの原理と機能主要原則の分析キーの役割要約するリストレンダリングキーの原理と...

React Hooksを使用する際のよくある落とし穴

React Hooks は React 16.8 で導入された新しい機能で、クラスを使用せずに状態や...

CSS の overflow: hidden の使い方 (オーバーフローの非表示とフロートのクリア)

オーバーフロー非表示指定された高さを超えるテキストや画像情報を非表示にすることを意味します。 <...

WeChatアプレットキャンバスが署名機能を実装

WeChatアプレットプロジェクトでは、開発モジュールに手書き署名機能が含まれ、WeChatアプレッ...

MySql 自動切り捨て例の詳細な説明

MySql 自動切り捨て例の詳細な説明友人が質問しました。プロジェクト内で挿入または更新ステートメン...

CSSはletter-spacingプロパティを通じて単語間の間隔を制御します。

letter-spacing プロパティ: 文字間のスペース (文字間隔) を増減します。このプロ...

DOM操作テーブルの例(DOMはテーブルを作成します)

1. HTML タグを使用してテーブルを作成します。コードをコピーコードは次のとおりです。 <...

シンプルなドラッグ効果を実現するJavaScript

この記事では、簡単なドラッグ効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...

JavaScript のシングルトン デザイン パターン

目次1. デザインパターンとは何ですか? 2. デザインパターンの5つの設計原則(SOLID) 3....

MySQL 8.0 の binlog の詳細な説明

1 はじめにバイナリ ログは、データを持つ、またはデータを変更する可能性がある SQL ステートメン...

組み込み Linux 開発環境で ping と nfs を構築するためのソリューション

1. 組み込みソフトウェアレベル 1) ブートローダ -> ブートローダ組み込みシステム全体の...

既存のDockerコンテナの内容を変更する方法

1. Docker psはコンテナをリストします 2. Docker cpはコンテナにファイルをコピ...

JavaScriptタイマーの詳細な説明

目次簡単な紹介間隔の設定説明するパラメータ戻り値使用法タイムアウトの設定説明するパラメータ使用法:タ...

vue.js ルーターのネストされたルートの実例

目次序文Vue CLI での設定基本コードVueルーターの登場ネストされたルートの設定要約する序文V...