ホームページ >運用・保守 >Nginx >nginx の受信速度制限を設定する方法

nginx の受信速度制限を設定する方法

PHPz
PHPz転載
2023-05-12 16:52:062074ブラウズ

ビジネス シナリオから始める

ビジネス開発プロセス中に、ファイルブラウザを通じて提供されるダウンロード サービスの速度を制限する必要があるという要件があります。たとえば、ユーザーがファイルブラウザを通じてファイルをダウンロードする場合、各ユーザーのダウンロード速度を制限する必要があります。この要件を拡張して、特定のユーザーのダウンロード速度を制限することもできます。

このビジネス要件を達成するには、現在のテクノロジー スタック (k8s nginx ingress) と組み合わせて、対応する nginx パラメーターを構成することで実現できます。

制限速度とは何ですか?

速度制限とは、その名の通り速度制限のことです。

ここでのレートは次のとおりです。

  • 単位時間内に 1 人のユーザーがリソースにアクセスする頻度。

  • 単位時間内に単一の IP がリソースにアクセスする頻度、

  • # を単位時間内の指定された接続の送信速度にすることもできます。

通常、後者のビジネス シナリオはダウンロード速度制限に存在します。

なぜ速度制限があるのでしょうか?

速度制限の本質は公平性の確保です。

帯域幅リソースが限られている場合は、各ユーザーに十分な帯域幅値が合理的に割り当てられるようにしてください。また、帯域幅リソースが限られている場合は、速度制限を通じてより多くのユーザーにサービスを提供できます。

さらに、速度制限により、分散型サービス拒否攻撃 (DDOS) の影響を大幅に軽減することもできます。

nginx ingress の yaml ファイルの設定は何ですか?

Nginx ingress の速度制限設定は、基本的に ingress の nginx.ingress.kubernetes.io アノテーションにあります。

以下では、速度制限に関連するアノテーションを 1 つずつ解釈します:

  • ##nginx.ingress.kubernetes.io/limit-connections: single IP アドレスが同時に持つことができる同時接続の数。同時接続数を超えると、503 エラーが返されます。

  • nginx.ingress.kubernetes.io/limit-rps: 単一 IP の 1 秒あたりのリクエスト数を制限します (1 秒あたりのリクエストの制限)。制限を超えると、503 エラーが返されます。設定で設定した値を超えても、すぐに 503 エラーが発生するわけではないことに注意してください。nginx では、一定の時間範囲内でのバースト リクエスト数の存在が許可されています (バースト リクエスト数 = limit-rps * limit-burst) -乗数)。では、503はいつ登場するのでしょうか?これは、nginx の電流制限モデルから始まります。 nginx の電流制限モデルはキューです (スレッド プールのキュー モデルを参照) 電流制限の最大接続数 = キューの処理能力とキューの長さ、つまり最大接続数/秒 =制限-rps 制限-rps*制限-バースト乗数。

  • nginx.ingress.kubernetes.io/limit-rpm:limit-rps と同じですが、limit-rpm の優先度は limit-rps よりも高くなります。 limit-rpm と limit-rps が同時に設定されている場合は、limit-rpm が優先されます。ただし、limit-connections も設定されている場合は、limit-connections が最も高い優先順位を持ちます。

  • nginx.ingress.kubernetes.io/limit-burst-multiplier: バースト リクエスト サイズの係数。主に接続のキューの長さを定義するために使用されます。 、デフォルトは 5

  • nginx.ingress.kubernetes.io/limit-rate-after: トラフィック量が超過した後に制限レートが実行されます。 、単位は KB

  • nginx.ingress.kubernetes.io/limit-rate: 1 秒あたりの単一接続のレート制限値 (KB 単位)。

  • nginx.ingress.kubernetes.io/limit-whitelist: IP ホワイトリストを設定します。ホワイトリスト内の IP には速度制限がなく、CIDR がサポートされます。、複数IP はカンマで区切ることができます。

#注意

    limit-connections、limit-rps、limit-rpm が同時に設定されている場合、優先度はYesです。 kubernetes.io/proxy-buffering: "on"
  • 実際のユーザー IP を取得するには、上記の IP を SLB または実際のユーザー IP と区別する必要があります

    4. ビジネス ニーズに対するソリューション
  • これらの知識ポイントを明確にしたら、ビジネス自体に戻って、次の構成をビジネス Ingress 構成ファイルに追加するだけです:

    rreee

以上がnginx の受信速度制限を設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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