ホームページ  >  記事  >  運用・保守  >  Nginxによるトラフィック制御

Nginxによるトラフィック制御

藏色散人
藏色散人転載
2019-10-18 14:44:162321ブラウズ

目的

Nginx の ngx_http_limit_conn_module モジュールと ngx_http_limit_req_module モジュールを理解して、リクエストのアクセス量を制御します。

推奨チュートリアル: nginx チュートリアル

Nginx のモジュール性

nginx の内部構造は、コア モジュールと一連のモジュールで構成されています機能モジュールで構成されています。モジュール型アーキテクチャにより各モジュールの機能が比較的シンプルになり、高い凝集性を実現し、Nginxの機能拡張も容易になります。

Web リクエストの場合、Nginx のすべての有効なモジュールは、レベルブレイク ゲームのレベルと同様にチェーンを形成します。各モジュールは、圧縮を実装する ngx_http_gzip_module モジュールなど、特定の機能を担当します。検証を実装する ngx_http_auth_basic_module モジュールと、プロキシなどを実装する ngx_http_proxy_module モジュールです。サーバーへの接続リクエストは、Nginx の各モジュールによって順番に処理され、これらのモジュールによって処理されたリクエストのみが実際にバックグラウンドのプログラム コードに渡されて処理されます。

Nginx 同時アクセス制御

Web サーバーの場合、Web クローラーや悪意のある大量トラフィック攻撃に遭遇すると、サーバーのメモリと CPU がいっぱいになり、帯域幅も低下します。したがって、成熟したサーバー エージェント ソフトウェアとして、これらの状況を制御できる必要があります。

Nginx には同時実行性を制御する 2 つの方法があり、1 つは IP またはその他のパラメーターによって同時実行量を制御する方法、もう 1 つは単位時間あたりの総リクエスト処理量を制御する方法です。つまり、同時実行性と並列性の制御であり、これら 2 つの機能はそれぞれ ngx_http_limit_conn_module モジュールと ngx_http_limit_req_module モジュールによって実装されます。

ngx_http_limit_conn_module モジュール

説明

このモジュールは主に、同時リクエストの量を制御するために使用されます。

パラメータ設定

#limit_conn_zone

命令設定limit_conn_zone keyzone=name:size

設定コンテキスト:http

説明:keyは Nginx の変数で、通常は $binary_remote_addr | $server_name; name は共有メモリの名前、size は共有メモリのサイズです; この設定は共有メモリ空間名に適用され、キーのアクセス ステータスが保存されます

●limit_conn_log_level

構文:limit_conn_log_level info|notice|warn|error

デフォルト値:error

設定コンテキスト:http、server、location

説明: アクセスが上限に達すると、アクセス ステータスがログに記録されます。

#● : http、server、location

手順: アクセスの同時実行制御にzone_nameを使用し、数値を超えた場合に対応するエラー コードを返します

●limit_conn_status

構文:limit_conn_status code

デフォルト値:503

設定コンテキスト: http、server、location

説明: アクセスが制限数を超えると、エラー コードがクライアントに返されます。コードは、error_page などのパラメータとともに使用できます。アクセス時、制限を超えた場合に顧客にわかりやすいエラー ページを返します

#● limit_rate

構文: limit_rate rate

デフォルト値: 0

設定コンテキスト: http、server 、location

説明: 各リンクのレートを制限します。レートは 1 秒あたりのダウンロード速度を表します。

## ●limit_rate_after

構文: limit_rate_after size

構成コンテキスト: http、server、location

説明: このコマンドは、limit_rate と組み合わされます。トラフィックが size を超えると、limit_rate が有効になります。

簡単な構成例

limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
    listen       80;
    server_name  www.domain.com;
    root   /path/;
    index  index.html index.htm;
    location /ip {
      limit_conn_status 503; # 超限制后返回的状态码;
      limit_conn_log_level warn; # 日志记录级别
      limit_rate 50; # 带宽限制
      limit_conn addr 1; # 控制并发访问
    }
    # 当超过并发访问限制时,返回503错误页面
    error_page 503  /503.html;
}

ngx_http_limit_req_module モジュール

説明

このモジュールは主に、1 回あたりのリクエスト数を制御します。単位時間。フィルタリングには「リーキー バケット」アルゴリズムを使用します。制限レートを設定した後、単位時間あたりのリクエスト数がレートを超えると、モジュールはバースト値を検出します。値が 0 の場合、リクエストは次の値に基づいてエラーを返します。遅延|遅延なしの設定または待機; バーストが 0 より大きい場合、リクエストの数がレートより大きくバーストより少ない場合、リクエストは処理のために待機キューに入ります。

パラメータ設定

#limit_req_zone

構文: limit_req_zone keyzone=name:size rate=rate

設定コンテキスト: http

注: key は Nginx の変数で、通常は $binary_remote_addr | $server_name、name は共有メモリの名前、size は共有メモリのサイズ、rate はアクセス頻度 (r/s、r/m 単位) です。この設定は、共有メモリ空間名に適用され、$key;

## のアクセス ステータスを保存します。 ]

設定コンテキスト: http、server、location

説明: 制限を有効にし、バーストは最大容量を設定し、リクエストが制限を超えたときに処理を待機するかエラー コードを返すかを nolay で決定します。制限;

limit_req_log_level および limit_req_status 設定パラメータは、ngx_http_limit_conn_module モジュールと一致しています;

簡単な設定例

limit_req_zone $binary_remote_addr zone=req:10m rate=2r/m;
server {
    listen       80;
    server_name  www.domain.com;
    root   /path/;
    index  index.html index.htm;
    location /limit {
      limit_req zone=req burst=3 nodelay;
    }
    # 当超过并发访问限制时,返回503错误页面
    error_page 503  /503.html;
}

Note

両方この 2 つのアクセス制御のうち、メモリ空間に対して適用する必要があるのは、メモリ空間があるため、当然メモリが枯渇する状況が発生します。このとき、新しいリクエストはエラーを返します。そのため、アクセス制限がオンになると、このような事態が起こらないよう監視する必要があります。

概要

Nginx のモジュール アーキテクチャの簡単な紹介を通じて、Nginx のリクエストの同時実行制御を実現するための ngx_http_limit_conn_module モジュールと ngx_http_limit_req_module モジュールの機能と構成パラメータを理解することに重点を置きます。何か問題がある場合は、お知らせください

以上がNginxによるトラフィック制御の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。