Nginx でアクセス頻度、ダウンロード速度、同時接続数を制限する方法

Nginx でアクセス頻度、ダウンロード速度、同時接続数を制限する方法

1. アクセス頻度、同時接続、ダウンロード速度を制限するために使用されるモジュールと命令の概要

  • ngx_http_limit_req_module: 単位時間あたりのリクエスト数を制限するために使用します。つまり、リーキー バケット アルゴリズム「リーキー バケット」を使用してレート制限を行います。
  • ngx_http_limit_conn_module: 同時接続数、つまり同時接続数の制限に使用されます
  • limit_rate と limit_rate_after: ダウンロード速度の設定

リーキーバケットアルゴリズム

アルゴリズムのアイデアは次のとおりです。

  • 水(要求)は上からバケツに注がれ、バケツの底から流れ出る(処理される)
  • 時間内に流出できない水はバケツ(バッファ)に貯められ、一定速度で流出します。
  • バケツがいっぱいになると水があふれます(捨てられます)。
  • このアルゴリズムの中核は、リクエストをキャッシュし、均一な速度で処理し、冗長なリクエストを直接破棄することです。
  • Nginx のリクエスト レート制限モジュールは、リーキー バケット アルゴリズムを使用して、リクエストのリアルタイム処理速度が設定されたしきい値を超えないように強制的に保証します。

2. URLアクセス要求頻度を制限する

http{ 
    ... 
 
  limit_req_zone $binary_remote_addr ゾーン=1:30m レート=20r/s; 
  limit_req_zone $binary_remote_addr $uri ゾーン=2:30m レート=20r/s; 
  limit_req_zone $binary_remote_addr $request_uri ゾーン=3:30m レート=20r/s; 
  制限要求ステータス 444; 
    ... 
 
  サーバ{ 
      ... 
 
    limit_req ゾーン=2 バースト=15 ノードレイ; 
    ... 
 
  } 
} 

説明する:

limit_req_zone $binary_remote_addr ゾーン=1:30m レート=20r/s;

  • $binary_remote_addrは、同じクライアントIPアドレスを異なるURLに制限します。
  • ゾーン: ゾーン名 1 はセッション 30M を保存します
  • レート: 1秒あたりのリクエスト数

limit_req_zone $binary_remote_addr $uri ゾーン=2:30m レート=20r/s;

  • $binary_remote_addr $uriは同じクライアントIPアドレスを同じURLに制限します
  • ゾーン: ゾーン名 2店舗 セッション 30M
  • レート: 1秒あたりのリクエスト数

limit_req_zone $binary_remote_addr $request_uri ゾーン=3:30m レート=20r/s;

  • $binary_remote_addr $request_uriは同じクライアントIPアドレスを同じURLに制限します
  • ゾーン: ゾーン名 2店舗 セッション 30M
  • レート: 1秒あたりのリクエスト数

limit_req ゾーン=2 バースト=15 ノードレイ;

  • ゾーン参照領域は2つです。
  • burst はサイズ 15 のバッファを設定します。大量のリクエスト (バースト) が到着すると、アクセスが上記の制限を超え、最初にバッファに配置されることがあります。
  • Nodelay は通常、burst と一緒に使用されます。nodelay が設定されている場合、アクセスが頻度を超えてバッファがいっぱいになると、503 が直接返されます。設定されている場合、すべての大きなリクエストは順番に待機します。

3. 同時接続制限

ケース1:

http { 
  ... 
 
  limit_conn_log_level エラー; 
  limit_conn_zone $binary_remote_addr ゾーン=addr:10m; 
  制限接続ステータス 503; 
 
  ... 
 
  サーバー{ 
 
    ... 
 
    場所 /download/ { 
      limit_conn addr 1; 単一のクライアントIPは1に制限されます 
    } 
    ... 
 
} 

ケース2:

http{ 
limit_conn_zone $binary_remote_addr ゾーン=perip:10m; 
limit_conn_zone $server_name ゾーン=サーバーあたり:10m; 
 
  サーバー{ 
    ... 
    limit_conn perip 10; #単一のクライアント IP とサーバー間の接続数 limit_conn perserver 100; #サーバーへの接続総数を制限} 
} 

4. ダウンロード速度を制限する

場所 /ダウンロード { 
  制限レート 128k; 
 } 
 
#ファイルの最初の10mを速度制限なしでダウンロードし、10mを超えた後は速度を128kb/sに制限するように設定したい場合は、次のコンテンツの場所/download {を追加します。 
    10分後に制限レートを設定します。 
    制限レート 128k; 
 } 

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • 悪意のあるクローラーの頻度を制限するために nginx 設定を変更する
  • nginx で単位時間あたりのアクセス頻度を制限するチュートリアル
  • 検索エンジンのクローラーの頻度を制限し、Web クローラーのブロックを禁止する Nginx 構成の例

<<:  mysql 実行プラン ID が空である (UNION キーワード) の詳細な説明

>>:  Vue で Axios 非同期リクエスト API を使用する方法

推薦する

Dockerコンテナシェルスクリプトの実行ステータスを監視する方法

シナリオ会社のプロジェクトはDockerでデプロイされています。原因不明ですが、コンテナが時々停止し...

Navicat For MySQL の使い方に関する簡単なチュートリアル

推薦する: Navicat for MySQL 15 登録とアクティベーションの詳細なチュートリアル...

MySQLにおけるトランザクションの永続性実装原理の詳細な説明

序文データベース トランザクションに関して言えば、トランザクションの ACID 特性、分離レベル、解...

Linux Bash スクリプトを使用してユーザーを識別する方法の例

多くの場合、bash スクリプト内またはスクリプト自体内で直接 sudo を使用してコマンドを実行す...

JSで実施された機雷掃海プロジェクトの概要

この記事では、JS掃海プロジェクトの概要を参考までに紹介します。具体的な内容は次のとおりです。プロジ...

VUEトークンの無効化プロセスの詳細な説明

目次ターゲット思考分析コード着陸要約するターゲットトークンの有効期限切れシナリオの処理トークンは、ユ...

JavaScript - Vue でのスロットの使用: スロット

目次Vue でのスロットの使用: slotスコープ付きスロット: テンプレートタグで囲む要約するVu...

JS のあらゆる場所で絶対等価演算子の使用をやめる

目次概要1. NULL値のテスト2. ユーザー入力を読み取る導入事実の根源はどこにあるのでしょうか?...

iFrameは背景を覆うポップアップレイヤーとして使うのに最適です

最近、私は「ぶどうコレクション」というプロジェクトに取り組んでいます。簡単に言うと、Budou ペー...

Vueの7つの値転送メソッドの詳細な説明

1. 父から息子へ子コンポーネントにpropsフィールドを定義し、その型は配列です (フィールド値の...

MySQL DDL による同期遅延を解決する方法

目次序文解決ツールの紹介仕組み使用制限使用上の注意使用例いくつかのパラメータの説明出力例Tencen...

JavaScript でオブジェクトをトラバースする 5 つの方法 サンプルコード

目次準備する5つの武器…のためにオブジェクト.キーオブジェクト.getOwnPropertyName...

Vueトップタグ閲覧履歴の実装

目次ナンセンス実装された機能文章要点ナンセンスデモプレビュー実装された機能デフォルトでホームページが...

nginx ロードバランシングを介して https にリダイレクトする方法

ウェブ上で証明書とキーをコピーするscp -rp -P52113 /application/ngin...

OracleデータをMySQLデータベースに抽出する実装プロセス

Oracle データベースから MySQL データベースへの移行では、Oracle データベース モ...