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 8.0.18 のインストールと設定のグラフィックチュートリアル

学習目標: Windowsシステムを使用してMySQLデータベースをインストールする方法を学びます。...

Centos7 Zabbix3.4 メールアラーム設定(メール内容がxx.bin添付ファイルになる問題の解決)

目次1. 監視Linuxホストを追加する2. メールボックスを設定する1. 監視Linuxホストを追...

CSS3 rgb と rgba (透明色) の使い方の詳しい説明

誰もが色にとても敏感だと思います。私たちの目が見るところにはどこにでも色があります。では、CSS で...

VMware 構成 VMnet8 ネットワーク方法の手順

目次1. はじめに2. 設定手順1. はじめに1. NAT モード (VMnet8) は、仮想マシン...

httpsウェブサイトにリファラーhttpsとhttpジャンプリファラーを送信させる方法

この記事では、HTTP プロトコルのリファラーのメタデータ パラメータの提案について説明します。この...

Docker を使用した Laravel アプリケーションのデプロイ例

この記事で使用されているPHPベースイメージはphp:7.3-apacheです。この記事の Lara...

CSS でフッターの「下部吸収」効果を実現

よく遭遇する問題: 下部の要素を「下部に貼り付ける」効果を CSS でどのように実現するか。この記事...

CSS ウェイト値(カスケード)の例の詳細な説明

•CSSには多くのセレクターがあります。複数のセレクターを同じ要素に適用するとどうなるでしょうか? ...

uniappを使用してWeChatミニプログラムでEChartsを使用する方法

今日は、uniapp を使用して Echarts を統合し、マップ チャートを表示します。 mpvu...

vue 動的コンポーネント

目次1. コンポーネント2. キープアライブ2.1 問題点2.2 キープアライブを使って解決する2....

MYSQL メタデータ ロック (MDL ロック) の理論とロック タイプ テスト

目次MYSQL メタデータ ロック (MDL ロック) 学習理論とロック タイプ テスト1. 予備的...

TypeScriptにおけるunknownとanyの違いについて詳しく説明します

目次序文1. 不明 vs 任意2. 未知とあらゆるもののメンタルモデル3. まとめ要約する序文any...

JS 配列の重複を排除する 9 つの高度な方法 (実証済みで効果的)

序文一般的な方法はここには記載されていませんが、等しいかどうかを判断するための二重ループや、比較のた...

WeChatアプレットがジグソーパズルゲームを実装

この記事では、WeChatアプレットでジグソーパズルゲームを実装するための具体的なコードを参考までに...