NGINX(エンジンエックス)|日本公式サイト

NGINXはF5ファミリーの一員となりました。新体制の詳細はこちらを御覧ください。

リバースプロキシサーバとロードバランサーは、クライアント/サーバ コンピューティングアーキテクチャの構成要素です。どちらも、クライアントとサーバ間の通信を仲介し、効率を高める機能を果たします。専用デバイスとしての実装も可能ですが、現代のWebアーキテクチャでは、汎用ハードウェア上で動作するソフトウェアアプリケーションとして実装されることが多くなっています。

基本的な定義は、以下のように単純です。

  • リバースプロキシは、クライアントからのリクエストを受け取り、リクエストに応じられるサーバに転送し、そのサーバからのレスポンスをクライアントに返します。
  • ロードバランサーは、受信したクライアントのリクエストをサーバグループ内で分配し、それぞれのリクエストで選択されたサーバからのレスポンスを適切なクライアントに返します。

上記の定義だけでは、似通っていると思われるのではないでしょうか。どちらのタイプのアプリケーションも、クライアントとサーバの間に配置され、クライアントからのリクエストを受け入れ、サーバからのレスポンスを提供します。したがって、リバースプロキシとロードバランサーの違いについて混乱するのも無理はありません。明確に区別するために、どのような場合に、どのような理由で、それぞれがWebサイトにデプロイされるのかを見ていきましょう。

ロードバランシング

一般的に、サイトが1台のサーバでは大量のリクエストを効率的に処理しきれず、複数のサーバを必要とする場合に、ロードバランサーがデプロイされます。複数のサーバをデプロイすることで、単一障害点もなくなり、Webサイトの信頼性が向上します。通常、サーバはすべて同じコンテンツをホストします。ロードバランサーの役割は、各サーバの能力を最大限に活用し、どのサーバにも過剰な負荷がかからぬよう、作業負荷を分散し、クライアントに可能な限り迅速にレスポンスを提供することです。

クライアントに提示されるエラーレスポンスが減るため、ロードバランサーによってユーザエクスペリエンスも向上します。サーバの停止を検知すると、そのサーバからグループ内の他のサーバにリクエストを迂回させます。最も単純な実装では、ロードバランサーは通常のリクエストに対するエラーレスポンスを傍受することで、サーバの健全性を検知します。アプリケーションのヘルスチェックは、より柔軟で洗練された手法です。この場合、ロードバランサーは個別のヘルスチェックリクエストを送信し、特定のタイプのレスポンスを要求することで、サーバの健全性を評価します。

一部のロードバランサーは、セッションパーシステンスも提供します。これは、特定のクライアントからのすべてのリクエストを同じサーバに送るという便利な機能です。HTTPは、理論的にはステートレスです。しかし、多くのアプリケーションでは、コア機能を提供するためにステート情報を保存する必要があります。Eコマースサイトの買い物かごは、その一例です。このようなアプリケーションは、ロードバランシングされた環境では、ロードバランサーがユーザセッション内のリクエストを、最初のリクエストに応答したサーバにすべて誘導するのではなく、異なるサーバに分配するため、パフォーマンスが低下したり、場合によっては失敗が起こったりします。

リバースプロキシ

ロードバランサーのデプロイは、複数のサーバがある場合のみ意味がありますが、リバースプロキシのデプロイは、多くの場合、Webサーバやアプリケーションサーバが1台であっても理にかなっています。リバースプロキシはWebサイトの「表の顔」のようなものであり、Webサイトの宣伝のためにアドレスが使用され、サイトのネットワークの端に配置されます。これにより、Webサイトでホストされているコンテンツに対するリクエストを、Webブラウザやモバイルアプリから受信します。そのメリットは、以下の2つです。

  • セキュリティの向上 – 内部ネットワークの外からは、バックエンドサーバの情報を認識できません。このため、悪意のあるクライアントが直接バックエンドサーバにアクセスして脆弱性を利用することは不可能です。多くのリバースプロキシサーバは、特定のクライアントIPアドレスからのトラフィックを拒否(ブラックリスト化)する、各クライアントからの接続数を制限するといった方法によって、分散型サービス拒否(DDoS)攻撃からバックエンドサーバを保護する機能を備えています。
  • 拡張性と柔軟性の向上 – クライアントにはリバースプロキシのIPアドレスしか表示されません。したがってバックエンドインフラストラクチャの構成を自由に変更できます。これは、ロードバランシングされた環境では特に有用であり、トラフィック量の変動に応じてサーバを増減できます。

リバースプロキシをデプロイするもう1つの理由は、Webアクセラレーションです。つまり、レスポンスを生成してクライアントに返すまでの時間を短縮できます。Webアクセラレーションには、以下のような手法があります。

  • 圧縮 – サーバのレスポンスをクライアントに返す前に圧縮することで(gzipを使用するなど)、必要な帯域幅を減らし、ネットワークでの転送を高速化します。
  • SSLターミネーション – クライアントとサーバ間のトラフィックを暗号化することで、インターネットのようなパブリックネットワークを通過するトラフィックを保護します。しかし、復号や暗号化は集中的なコンピューティングを必要とします。リバースプロキシは、受信したリクエストを復号化し、サーバからのレスポンスを暗号化します。これによって、バックエンドサーバのリソースを解放し、本来の目的であるコンテンツの提供に向けることができます。
  • キャッシング – これによって、クライアントへの応答時間を短縮するだけでなく、バックエンドサーバの負荷も軽減できます。

NGINX Plusはどのように役立ちますか?

NGINX PlusとNGINXは、クラス最高のロードバランシングソリューションであり、Dropbox、Netflix、Zyngaなどの高トラフィックのWebサイトで使用されています。世界中で4.5億以上のWebサイトがNGINX PlusとNGINX Open Sourceを利用しており、迅速かつ確実で安全なコンテンツのデリバリーを実現しています。

NGINX Plusは、上記すべての機能をはじめとする多くのロードバランシング/リバースプロキシ機能を提供し、Webサイトのパフォーマンス、信頼性、セキュリティ、拡張性を向上させます。ソフトウェアベースのロードバランサーであるNGINX Plusは、同様の機能を持つハードウェアベースのソリューションに比べて、はるかに低いコストで利用できます。NGINX Plusの包括的なロードバランシング/リバースプロキシ機能により、高度に最適化されたアプリケーションデリバリーネットワークを構築できます。

ここでご紹介した機能に関するNGINX Plusでの実装については、当社ブログ「NGINXとは? NGINXとNGINX Plusを徹底解説します」をご覧ください。