はじめに
こんにちは、 @hayatohanaoka です。
今回は、Web開発においてよく聞く
「プロキシ」と「リバースプロキシ」
について書かせていただきます。
イマイチ理解ができていなかった人や、初めてその言葉を聞いた人向けに、
両者の違いを図解付きで整理していきます!!
記事が読み終わった頃には、それぞれについての理解が深まっていると最高です!!
よければ最後までお付き合いください!!
プロキシ(フォワードプロキシ)とは?
クライアント側に立って、サーバーへの通信を集約し、そのままサーバーに流すもの
複数のクライアントからの通信をプロキシが集約し、外部サーバーへ代わりにアクセスします。
外部サーバーから見ると、アクセス元はプロキシであり、サーバーに対して、クライアントの正体は隠された状態になります。
代表的なユースケース
- 企業内ネットワーク: 社内PCからの外部アクセスをプロキシ経由に制限し、不正なサイトへのアクセスをブロックする
- VPN: 自分のIPアドレスを隠してインターネットにアクセスする
- キャッシュ: よくアクセスするコンテンツをプロキシがキャッシュし、通信量を削減する
リバースプロキシとは?
サーバー側に立って、サーバーへの通信を集約し、よしなにサーバーを選んで流すもの
クライアントはリバースプロキシとだけ通信します。
クライアントから見ると、通信先はリバースプロキシであり、クライアントに対して、裏のサーバーの正体は隠された状態になります。
代表的なユースケース
- Nginx / ロードバランサー: 1つのドメインで受けたリクエストを、裏の複数サーバーに振り分ける
- CORS回避: フロントエンドとAPIを同一オリジンに見せることで、ブラウザのCORS制約を回避する
- SSL終端: リバースプロキシでHTTPSを処理し、裏のサーバーはHTTPのままにすることで構成をシンプルにする
両者の違い
並べてみると、違いは「誰の前に立つか」だけです。
| プロキシ | リバースプロキシ | |
|---|---|---|
| 立ち位置 | クライアント側 | サーバー側 |
| 誰を隠すか | クライアントを隠す | サーバーを隠す |
| 誰が正体を知らないか | サーバーがクライアントの正体を知らない | クライアントがサーバーの正体を知らない |
まとめ
どちらも「間に立って通信を仲介する」という役割は同じです。
...が!!
クライアント側に立って、サーバーへの通信を集約し、そのままサーバーに流すのがプロキシ
サーバー側に立って、サーバーへの通信を集約し、よしなにサーバーを選んで流すのがリバースプロキシ
という違いがあるのでした。
最後まで読んでいただき、ありがとうございました!