これは何?
リバースプロキシを建てて,認証の仕組みを学ぼう第一回です。
本記事ではリバースプロキシとはなんぞやということを解説します。
リバースプロキシとは
リバースプロキシに厳密な定義はないと思うので,出処が信用できそうでわかりやすい記事を貼っておきます。
図も同サイトから引用
リバースプロキシは、Webサーバーの前にあり、クライアント(Webブラウザーなど)のリクエストをそれらのWebサーバーに転送するサーバーです。通常、リバースプロキシは、セキュリティ、パフォーマンス、および信頼性を向上させるために実装されます。
フォワードプロキシとリバースプロキシの違いはわずかですが、重要です。簡単にまとめると、フォワードプロキシはクライアントの前にあり、配信元サーバーがその特定のクライアントと直接通信することはないということです。一方、リバースプロキシは配信元サーバーの前にあり、クライアントがその配信元サーバーと直接通信しないようにします。
長いので一旦,リバースプロキシとは,外部からのリクエストを中継してサーバに適切に転送するものくらいに思っておけば良さそうだと思います。AWSでいうところのALBとかに近い概念なのかなと。
リバースプロキシの用途
以下に、リバースプロキシの利点の一部を示しています:
- 負荷分散 - 毎日何百万人ものユーザーを獲得する人気のあるWebサイトでは、単一の配信元サーバーですべての着信サイトトラフィックを処理できない場合があります。代わりに、サイトを異なるサーバーのプールに分散し、すべてが同じサイトのリクエストを処理できます。この場合、リバースプロキシは、単一サーバーが過負荷になるのを防止するために、着信トラフィックを異なるサーバー間で均等に分散する負荷分散ソリューションを提供できます。サーバーで完全に障害が発生した場合、他のサーバーがステップアップしてトラフィックを処理できます。
- 攻撃からの保護 - リバースプロキシを配置すると、Webサイトまたはサービスは、配信元サーバーのIPアドレスを明らかにする必要がなくなります。これにより、攻撃者がDDoS攻撃などの標的型攻撃を利用することがはるかに困難になります。代わりに、攻撃者はCloudflareのCDNなどのリバースプロキシのみを標的にできるようになります。これにより、セキュリティが強化され、サイバー攻撃を防ぐためのリソースが増えます。
- グローバルサーバー負荷分散(GSLB)この形式の負荷分散では、Webサイトを世界中の複数のサーバーに分散でき、リバースプロキシはクライアントを地理的に最も近いサーバーに送信します。これにより、リクエストと応答が移動する必要がある距離が短縮され、読み込み時間が最小限に抑えられます。
- キャッシング - リバースプロキシもコンテンツをキャッシュできるため、パフォーマンスが向上します。たとえば、パリのユーザーがロサンゼルスのWebサーバーで逆プロキシされたWebサイトにアクセスすると、ユーザーは実際にパリのローカルリバースプロキシサーバーに接続し、LAの配信元サーバーと通信する必要があります。その後、応答データをキャッシュ(または一時的に保存)できます。その後、サイトを閲覧するパリのユーザーは、パリのリバースプロキシサーバーからローカルにキャッシュされたバージョンを取得するため、パフォーマンスが大幅に向上します。
- SSL暗号化 - 各クライアントのSSL(またはTLS)通信の暗号化と暗号化解除は、配信元サーバーにとって計算コストが高くなる可能性があります。リバースプロキシを構成して、すべての着信リクエストを復号化し、すべての発信応答を暗号化して、配信元サーバー上の貴重なリソースを解放できます。
メルカリでの使用例
漫画村での使用
せっかくなので若干特殊な用途ですが,漫画村事件にも触れておきます。
漫画村事件でもリバースプロキシが登場しています。
- サイト運営者はリバースプロキシだけを管理し,漫画データをキャッシングしない
- 漫画データは第三者が公開しているものを使用し,リバースプロキシを使って漫画データにアクセスできるようにする
の2点により法律の抜け穴を狙ったものになります(結局有罪になってしまいましたが)。
具体的にどう実装するか
インターネットを見ているとNginxかApacheを使った実装が多そうです。
次回はNginx(Openresty)を使ってリバースプロキシを建てるにあたって調べたことをまとめています。
↓