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

推薦する

Vue.js スタイルレイアウト Flutter ビジネス開発共通スキル

シャドウスタイルにおけるフラッターとCSSの対応UIによって指定されたCSSスタイル 幅: 75px...

CSSは2つの要素をブレンドする効果(スティッキー効果)を実現します。

数年前、Taobaoのモバイル版の左下隅に面白い丸いボタンがあったことを覚えています。それをクリック...

Linux で開いているポートへのリモート アクセスを許可する方法

1. ファイアウォール設定ファイルを変更する # vi /etc/sysconfig/iptable...

Vue3 プロジェクトで WeChat 認証ログインをエレガントに実装する方法

目次序文準備する実装のアイデアコードについて要約する序文WeChat 認証ログインは、WeChat ...

MySQL GRANT ユーザー認証の実装

承認とは、ユーザーに特定の権限を付与することです。たとえば、新しく作成したユーザーに、すべてのデータ...

HTML でさまざまなスペースの特徴と表現を探る (推奨)

I. 概要HTML テンプレートを作成するときに、テキスト レイアウトの手段としてスペースが使用さ...

Webpack コンポーネントの使用状況統計を実装するための 50 行のコード

背景最近、リーダーからコンポーネント ライブラリを構築するように依頼があり、プロジェクトで現在使用さ...

2つのNode.jsプロセスがどのように通信するかの詳細な説明

目次序文異なるコンピュータ上の 2 つの Node.js プロセス間の通信TCPソケットの使用HTT...

MySQLは、where in()順序ソートを実装するためにfind_in_set()関数を使用します。

この記事では、MySQL で find_in_set() 関数を使用して where in() の順...

HTML テーブル タグ チュートリアル (47): ネストされたテーブル

<br />このページでは、テーブルをネストすることで組版を実現しています。つまり、1 ...

Centos7 に PHP と Nginx をインストールする詳細なチュートリアル

Centos のサーバー側への適用がますます普及するにつれて、Centos7 もますます使用されるよ...

DIV、テーブル、XHTML のウェブサイト構築の違いの分析と説明

簡単に言えば、ウェブサイト構築とは、「この人はどんな外見をしているのか」と「この人はどんな内面を持っ...

歴史的な Linux 画像処理および修復ソリューション

従来の Linux イメージで作成された ECS クラウド サーバーには、NTP と YUM が設定...

MySQL 8.0 のタイムゾーン問題を解決する手順

ソフトウェアバージョンウィンドウズ: ウィンドウズ10 MySQL: mysql-8.0.16-wi...

MySQLフィールド定義でnullを使用しない理由の分析

NULL が頻繁に使用されるのはなぜですか? (1)Javaのnull Java の NullPoi...