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アニメーションによるテーブルスクロールカルーセル効果の実装

推薦する

Linux でのインストール中にソフトウェア パッケージの依存関係レポートに関連する問題の解決策

目次背景1) yumのkeepchche機能を有効にする: 方法1 2) yum-utils ソフト...

例を通してBRタグとPタグの違いを理解する

<br />改行タグの使用<br>改行タグ<br>は終わりのない...

フロントエンド プロジェクトのデフォルトのスクロール バー スタイルを変更する (概要)

スクロールバーのデフォルトスタイルを変更する必要があるプロジェクトを多数作成しましたが、プラグインを...

Docker+nacos+seata1.3.0 のインストールと使用設定チュートリアル

これに先立ち、1日かけてやってみました。Seataは使い方が簡単で超シンプルですが、インストールや設...

Nofollowはコメントやメッセージ内のリンクを本当に機能させる

コメントとメッセージはもともと、ウェブマスターがコミュニティと読者層を構築するための優れた手段でした...

Mysql 5.7.18 MySQL proxies_priv を使用して同様のユーザーグループ管理を実装する

MySQL proxies_priv(シミュレートされたロール)を使用して同様のユーザーグループ管理...

Vue3はCSSの無限シームレススクロール効果を実装します

この記事では、CSS無限シームレススクロール効果を実現するためのvue3の具体的なコードを参考までに...

MySQLデータベース設計:Pythonを使ったスキーマ操作方法の詳しい解説

矢が放たれる前に、弓は矢にささやきました。「お前の自由は私のものだ。」スキーマは矢のようなもので、弓...

計算プロパティとリスナーの詳細

目次1. 計算されたプロパティ1.1 基本的な例1.2 計算プロパティキャッシュとメソッド1.3 計...

MySQLに挿入する前にデータが存在するかどうかを確認する方法

ビジネスシナリオ: 訪問者の訪問状況を記録する必要があるが、繰り返し記録することはできない挿入する前...

CSS で水平方向と垂直方向に中央揃えする 10 の方法を教えます (要約)

面接には必需品、仕事でも必ず使います。うーん、誰でも分かるでしょう。これ以上何も言わずに、要約とレン...

MySQL 集計関数のソート

目次MySQL 結果のソート - 集計関数環境クエリ結果の並べ替えクエリのグループ化と集約生徒の平均...

Vue 仮想 DOM の問題について

目次1. 仮想DOMとは何ですか? 2. 仮想 DOM が必要な理由3. 仮想DOMはどのようにして...

MySQLデータベースで列を追加、削除、変更する方法

この記事では、例を使用して、MySQL データベースの列を追加、削除、および変更する方法について説明...

MySQL 5.7 のスロークエリログの時間がシステム時間より 8 時間遅れている理由の詳細な説明

遅いクエリをチェックすると、時間が正しくなく、システム時間とちょうど 8 時間異なっていることがわか...