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 を使用する方法

推薦する

vue の v-bind を理解する

目次1. v-bindの主要ソースコードの分析1. v-bind属性はどこに均一に保存されるか: a...

MySQL SQL ステートメントのパフォーマンス チューニングの簡単な例

MySQL SQL ステートメントのパフォーマンス チューニングの簡単な例サーバー開発を行う際には、...

MySQLパスワード変更例の詳細な説明

MySQLパスワード変更例の詳細な説明長い間 MySQL を使用していませんでした。今日、MySQL...

アイデア展開Tomcatサービス実装プロセス図

まずプロジェクトの成果物を構成するスタートアップ項目の設定 Tomcatサービスを作成する開始したい...

MySQL はどのようにしてマスターとスレーブの同期を実現するのでしょうか?

マスタースレーブ同期 (マスタースレーブレプリケーションとも呼ばれる) は、マスタースレーブデータの...

vue-router を遅延ロードする 3 つの方法のまとめ

遅延読み込みを使用しない 'vue' から Vue をインポートします。 '...

知っておくべき JS 配列削減の高度な使い方 25 選

序文Reduce は ES5 で追加された新しい従来の配列メソッドの 1 つです。forEach、f...

Reactでpropsを使用する方法と制限する方法

コンポーネントの props (props はオブジェクトです)機能: コンポーネントに渡されたデー...

SpringBoot のパッケージ化と Docker へのアップロード、およびマルチインスタンス デプロイメントの実装に関する簡単な分析 (IDEA バージョン)

最近友人からDockerを触ったことがあるかと聞かれました。あまり自信がなかったので答えられませんで...

ログインインターセプションを実装するためのVueルーティング

目次1. 概要2. ログインインターセプションを実装するためのルーティングナビゲーションガード1. ...

JavaScript 関数のパフォーマンスを測定するさまざまな方法の比較

目次概要パフォーマンス.nowコンソール.time時間精度を短縮注意事項分割して征服する入力値に注意...

MySQL シリーズ: redo ログ、undo ログ、binlog の詳細な説明

取引の実施REDO ログはトランザクションの永続性を保証し、UNDO ログはトランザクションのロール...

MySQL のバックアップとリカバリの設計アイデア

背景まず、背景を説明します。ある制約により、当社の現在のバックアップ戦略では、1 日おきにフル バッ...

フックを使用して React コンポーネントを書くときに注意すべき 5 つの点

目次01. レンダリングが不要な場合はuseStateを使用する02. リンクの代わりにrouter...

MySQLクエリ文を書き換える3つの戦略

目次複雑なクエリとステップバイステップのクエリクエリステートメントを分割する共同クエリの分解問題のあ...