OpenResty Edge におけるカスタムキーを使用したリクエストレート制限
OpenResty Edge のレート制限は、カスタムキー(クライアント IP アドレス、URI、URI パラメータ、または Cookie)ごとにリクエストレートを制限し、2 つのしきい値を使用します:超過したリクエストを遅延させるソフトな「Shape at」レートと、それらを直接拒否するハードな「Reject at」レートです。クライアントがリクエストを送信するのが速すぎる場合(例えばサービス拒否攻撃の場合など)、これによりゲートウェイサーバーとオリジンサーバーの両方を保護し、サーバーが過負荷にならないようにします。以下では、レート制限のページルールを段階的に追加し、wrk でテストし、同じ制限を SSL ハンドシェイクに拡張します。
アプリケーションにリクエストレート制限のページルールを追加する
OpenResty Edge の管理者用 Web コンソールにアクセスしましょう。これはコンソールのサンプルデプロイメントです。各ユーザーは独自のローカルデプロイメントを持っています。
以前の例で使用した test-edge.com アプリケーションを引き続き使用できます。そのアプリケーションに入ります。
すでにページルールが 1 つ定義されています。
このページルールは、事前に定義されたアップストリームにリクエストを転送するリバースプロキシを設定しており、現時点ではリクエストレートの制限はありません。
では、既存のページルールを編集してレート制限を追加しましょう。新しいアクションを追加し、「Limit request rate」を検索します。
まず、レート制限のキーを指定する必要があります。
クライアントの IP アドレス、URI、URI パラメータ、Cookie など、さまざまなキータイプが選択可能です。ここでは、デフォルトのキータイプであるクライアント IP アドレスを選択します。これは、個々のクライアント IP アドレスごとに制限を適用することを意味します。
「Shape at」レートはソフトリミットです。クライアントがこのレートよりも速くリクエストを送信しようとすると、ゲートウェイサーバーはこれらの過剰なリクエストを遅延させてこのレートに合わせます。したがって、クライアントがリクエストを送信する速度が速いほど、ゲートウェイが追加する遅延も長くなります。ここでは、毎秒 50 リクエストのレートを指定します。
キーをクライアント IP アドレスに設定したため、制限は個々のクライアント IP アドレスごとに適用されます。
「Reject at」レートはハードリミットです。クライアントがこのハードリミットを超える速度でリクエストを送信する場合、待機せずに即座にブロックするなど、より積極的なアクションを取ることができます。ここでは、毎秒 100 リクエストのレートを指定します。
さまざまなブロックアクションを選択できます——現在の接続を即座に閉じる、エラーページを返す、またはボットを防ぐためのキャプチャページを返すなどです。デフォルトの「Error Page」(エラーページ)アクションを選択します。これは HTTP を介してエラーページを返します。
ここではデフォルトの HTTP ステータスコード 503 を使用します。これはサービス利用不可を示します。
このページルールへの変更を保存します。次に、いつものように、変更をプッシュするためにリリースします。
リリースすると、新しいページルールがすべてのゲートウェイサーバーに同期されます。
これで、新しいページルールがすべてのゲートウェイクラスターとサーバーにプッシュされました。私たちの設定変更には、サーバーのリロード、再起動、またはバイナリアップグレードは必要ありません。そのため、非常に効率的でスケーラブルです。
wrk でレート制限をテストする
次に、新しいレート制限の効果を検証します。
ターミナル上で、wrk というオープンソースツールを使用して、非常に高速に大量のリクエストを送信できます。
wrk -c 50 -d 1s http://test-edge.com/
ここでは、まず並行レベル 50 を使用します。-c オプションに注目してください。
このコマンドを実行すると、実際のリクエストレートは約毎秒 50 リクエストになります。これが私たちの「Shape at」レートです。
次に、並行レベルを上げて、wrk がより速くリクエストを送信するようにします。
wrk -c 128 -d 1s http://test-edge.com/
並行レベル 128 に注目してください。
実行します!多くの拒否されたリクエストにエラー応答があることに注意してください。
今回のリクエストレートが高いのは、サーバーが過剰なリクエストを非常に速く拒否しているためです。
SSL/TLS ハンドシェイクのレート制限
リクエストレートの制限に加えて、OpenResty Edge は HTTPS リクエストの SSL または TLS ハンドシェイクのレートも制限できます。
このページでは、SSL ハンドシェイクのレート制限を設定できます。スイッチをオンにすると、設定パラメータが表示されます。これらのパラメータは、リクエストレート制限機能と同じです——キーを選択し、「Shape at」と「Reject at」のレートを設定します。
OpenResty Edge レート制限に関するよくある質問
OpenResty Edge のレート制限は、どのリクエストを制限するかをどのように決定しますか?
選択したキーに基づいて制限します。デフォルトのキーはクライアント IP アドレスであるため、制限は個々のクライアント IP アドレスごとに適用されますが、URI、URI パラメータ、リクエスト Cookie、X-Forwarded-For 内のアドレス、またはリクエストヘッダーをキーにすることもできます。
「Shape at」レートと「Reject at」レートの違いは何ですか?
「Shape at」はソフトリミットです:ゲートウェイはレートを超えるリクエストを遅延させてレートに合わせるため、クライアントが速く送信するほど遅延が長くなります。「Reject at」はハードリミットです:クライアントがこれを超えると、ゲートウェイは待機する代わりに、より積極的なブロックアクションを取ります。
レート制限を超えたリクエストはどうなりますか?
ハードリミットのブロックアクションを選択できます:接続を即座に閉じる、エラーページを返す、またはボットを防ぐためのキャプチャページを返す。デフォルトの「Error Page」アクションは HTTP ステータスコード 503(サービス利用不可)を返します。
OpenResty Edge は SSL/TLS ハンドシェイクもレート制限できますか?
はい。リクエストレートに加えて、OpenResty Edge は HTTPS リクエストの SSL または TLS ハンドシェイクのレートも、リクエストレート制限と同じキー、「Shape at」、「Reject at」パラメータを使用して制限できます。
レート制限の変更にはサーバーのリロードや再起動が必要ですか?
いいえ。これらの設定変更には、サーバーのリロード、再起動、またはバイナリアップグレードは必要ありません。リリースを行うと、すべてのゲートウェイクラスターとサーバーに同期されます。
OpenResty Edge について
OpenResty Edge は、マイクロサービスと分散トラフィックアーキテクチャ向けに設計された多機能ゲートウェイソフトウェアで、当社が独自に開発しました。トラフィック管理、プライベート CDN 構築、API ゲートウェイ、セキュリティ保護などの機能を統合し、現代のアプリケーションの構築、管理、保護を容易にします。OpenResty Edge は業界をリードする性能と拡張性を持ち、高同時接続・高負荷シナリオの厳しい要求を満たすことができます。K8s などのコンテナアプリケーショントラフィックのスケジューリングをサポートし、大量のドメイン名を管理できるため、大規模ウェブサイトや複雑なアプリケーションのニーズを容易に満たすことができます。
著者について
章亦春(Zhang Yichun)は、オープンソースの OpenResty® プロジェクトの創始者であり、OpenResty Inc. の CEO および創業者です。
章亦春(GitHub ID: agentzh)は中国江蘇省生まれで、現在は米国ベイエリアに在住しております。彼は中国における初期のオープンソース技術と文化の提唱者およびリーダーの一人であり、Cloudflare、Yahoo!、Alibaba など、国際的に有名なハイテク企業に勤務した経験があります。「エッジコンピューティング」、「動的トレーシング」、「機械プログラミング」 の先駆者であり、22 年以上のプログラミング経験と 16 年以上のオープンソース経験を持っております。世界中で 4000 万以上のドメイン名を持つユーザーを抱えるオープンソースプロジェクトのリーダーとして、彼は OpenResty® オープンソースプロジェクトをベースに、米国シリコンバレーの中心部にハイテク企業 OpenResty Inc. を設立いたしました。同社の主力製品である OpenResty XRay(動的トレーシング技術を利用した非侵襲的な障害分析および排除ツール)と OpenResty Edge(マイクロサービスおよび分散トラフィックに最適化された多機能ゲートウェイソフトウェア)は、世界中の多くの上場企業および大企業から高い評価を得ております。OpenResty 以外にも、章亦春は Linux カーネル、Nginx、LuaJIT、GDB、SystemTap、LLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを寄与し、60 以上のオープンソースソフトウェアライブラリを執筆しております。
翻訳
英文版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!








































