ホームページ  >  記事  >  運用・保守  >  Nginxの電流制限を実装する方法

Nginxの電流制限を実装する方法

王林
王林転載
2023-05-18 12:07:352155ブラウズ

nginx 電流制限の仕組み

nginx 電流制限は、通信およびパケット交換ベースのコンピュータ ネットワークで広く使用され、緊急事態に対処するために使用されるリーキー バケット アルゴリズムを使用します。帯域幅が制限されている場合。この原理は、バケツに水が上から入り、下から漏れるのと非常によく似ており、水の流入量が水の漏れ量よりも大きい場合、バケツはあふれます。

リクエスト処理プロセスでは、水はクライアントからのリクエストを表し、バケットはリクエストが先入れ先出し (fifo) アルゴリズムに従って処理されるのを待っているキューを表します。 。リークはリクエストがバッファから出てサーバーによって処理されることを意味し、オーバーフローはリクエストがドロップされ、処理されないことを意味します。

Nginxの電流制限を実装する方法

1. アクセス頻度の制限 (通常のトラフィック)

nginx では、ngx_http_limit_req_module モジュールを使用してリクエストのアクセス頻度を制限します。 、リーキーバケットアルゴリズムの実装に基づいています。次に、nginx の limit_req_zone および limit_req 命令を使用して、単一 IP のリクエスト処理速度を制限します。

構文: limit_req_zone keyzone rate

Nginxの電流制限を実装する方法

  • key: 現在の制限オブジェクトを定義します。binary_remote_addr はキーですは、remote_addr (クライアント IP) に基づく電流制限を意味します。binary_ の目的は、メモリ使用量を圧縮することです。

  • zone: アクセス情報を格納する共有メモリ領域を定義します。myratelimit:10m はサイズ 10m、名前が myratelimit のメモリ領域を表します。 1mごとに16,000個のIPアドレスのアクセス情報を保存できるため、10mで160,000個のIPアドレスのアクセス情報を保存できます。

  • 「rate」パラメータは、最大アクセス レートを設定するために使用されます。「rate=10r/s」は、1 秒あたり 10 件以下のリクエストが処理されることを意味します。 nginx は実際にはミリ秒の粒度でリクエスト情報を追跡するため、実際には 10r/s が制限です。つまり、100 ミリ秒ごとに 1 つのリクエストが処理されます。これは、最後のリクエストが処理されてから 100 ミリ秒以内に別のリクエストが到着した場合、そのリクエストの処理は拒否されることを意味します。

2. アクセス頻度の制限(バーストトラフィック)

上記の設定により、トラフィックが急激に増加した場合、超過リクエストが発生します。拒否され、バースト トラフィックを処理できません。バースト トラフィックにどのように対処すればよいでしょうか? nginx は、バースト トラフィックの問題を解決するためにバースト パラメーターを提供し、nolay パラメーターと組み合わせて使用​​されます。バーストはバースト、バーストと翻訳され、設定された処理速度を超えた後に処理できる追加のリクエストの数を示します。

Nginxの電流制限を実装する方法

burst=20 nolay は、これら 20 個のリクエストが遅延なく即座に処理されることを意味します。これは、特殊なケースを処理することと同じです。ただし、これら 20 個のバースト リクエストがすぐに処理されたとしても、後続のリクエストはすぐには処理されません。バースト=20 は、キャッシュ キューの 20 個のホールを占有することと同等であり、リクエストが処理されたとしても、この 20 個の位置は 100ms ごとにしか解放されません。これにより、安定した速度の効果が得られますが、突然のトラフィックも正常に処理できます。

3. 同時接続数を制限する

nginx の ngx_http_limit_conn_module モジュールには、リソース接続数を制限する機能があり、limit_conn_zone および limit_conn 命令を使用するだけです。

Nginxの電流制限を実装する方法

limit_conn perip 20: 対応するキーは $binary_remote_addr です。これは、単一の IP が同時に保持できる接続は最大 20 に制限されていることを意味します。 limit_conn perserver 100: 対応するキーは $server_name で、仮想ホスト (サーバー) が同時に処理できる同時接続の合計数を示します。この接続は、要求ヘッダーがバックエンド サーバーによって処理された後にのみカウントされることに注意してください。

以上がNginxの電流制限を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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