リバースプロキシとは?サーバーの前に立つサーバー
リバースプロキシは、バックエンドサーバーの前に位置するサーバーであり、クライアントのリクエストを受け取って転送しつつ、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では、ローリングデプロイとカナリアデプロイのためにトラフィックのルーティングを制御します。