Skip to content
Latchkey

リバースプロキシとは?サーバーの前に立つサーバー

リバースプロキシは、バックエンドサーバーの前に位置するサーバーであり、クライアントのリクエストを受け取って転送しつつ、TLS、キャッシュ、ルーティングといった関心事を処理します。

フォワードプロキシはクライアントの代わりに動作し、リバースプロキシはサーバーの代わりに動作します。クライアントはリバースプロキシをアプリケーションであるかのように接続し、リバースプロキシはその背後にある1つ以上のバックエンドにリクエストを転送します。Nginx、HAProxy、Envoy、Traefikが一般的なリバースプロキシであり、ロードバランサーやAPI gatewayの基盤となっています。

リバースプロキシが行うこと

  • TLSを終端し、バックエンドが内部でプレーンなHTTPで通信できるようにします。
  • ホストやパスによってリクエストを異なるサービスにルーティングします。
  • レスポンスをキャッシュしてバックエンドの負荷を軽減します。
  • レート制限、圧縮、セキュリティヘッダーを追加します。

リバースプロキシ対ロードバランサー

この2つは大きく重なります。ロードバランサーはインスタンス間でトラフィックを分散し、リバースプロキシはリクエストを転送・変換します。ほとんどのレイヤー7ロードバランサーはリバースプロキシであり、ほとんどのリバースプロキシは負荷分散ができるため、これらのラベルは同じコンポーネントが異なる役割を果たしている様子を表すことが多いです。

なぜバックエンドがその背後に置かれるのか

リバースプロキシを前面に置くことで、横断的な関心事を一元化できます。証明書、ルーティング、レート制限を管理する場所が1つになります。バックエンドはシンプルなままで、インターネットに直接さらされないため、セキュリティと保守性の両方が向上します。

コンテナプラットフォームにおいて

Kubernetesでは、ingress controllerが外部トラフィックをサービスにルーティングするリバースプロキシです。PaaSプラットフォームでは、マネージドなリバースプロキシがTLSとルーティングを処理してくれます。パターンは同じです。アプリの前に立つスマートな玄関口です。

CI/CDでの役割

デプロイ中、リバースプロキシまたはingressは、サービスのどのバージョンがトラフィックを受け取るかを決定し、ローリングリリースとカナリアリリースを可能にします。パイプラインは、トラフィックを新しいリリースに移すためにingressやプロキシの設定を更新することが多く、プロキシはデプロイをまたいでTLSとルーティングを安定させます。

重要なポイント

  • リバースプロキシはバックエンドの前面に立ち、TLS、ルーティング、キャッシュを処理します。
  • ロードバランサーと重なる部分があり、レイヤー7のバランサーはリバースプロキシです。
  • CI/CDでは、ローリングデプロイとカナリアデプロイのためにトラフィックのルーティングを制御します。

関連ガイド