はじめに
プロキシとリバースプロキシってややこしいですよね。
この記事では、概念図を交えながら混乱しやすいプロキシとリバースプロキシの違いをまとめていきます。
プロキシとは
一般的に使われるプロキシといえば、「forward proxy」のことをさします。
forward proxyとは、ある別のWebサイトへのリクエストを受け取り、クライアントの代わりにWebサイトへリクエストを送信するサーバのことです。
こちらの図がforward proxyの概念図です。
クライアントXがとあるWebサイト(サーバZ)にアクセスする時にプロキシサーバYを利用している例です。
リクエストは クライアントX → プロキシY → WebサーバZ
という流れで伝わっていきます。
プロキシを使う目的
このようなforward proxyを使う目的が、WebサーバZに直接アクセスできないクライアントXからZにリクエストを送信できるようにすることです。例としては、
- クライアントがWebサイトの権限者からブロックされているとき(IPでブラックリスト)
- Youtubeへの通信をブロックしている会社からYoutubeにアクセスしたいとき
- 政府が特定のニュースサイトへの通信を遮断しているとき
- 大学がHTTP以外のプロトコルを制限しているとき(研究室内のサーバにアクセスするために踏み台としてプロキシを使う)
などが挙げられます。
リバースプロキシとは
リクエストの流れはプロキシと同様で、 クライアントX → リバースプロキシY → WebサーバZ
のように伝わっていきます。しかし、リバースプロキシでは、クライアントXは、WebサーバZの存在を知らないという大きな違いがあります。
クライアントXは、Publicに存在しているリバースプロキシYと通信することで、リクエスト送信とレスポンス受信ができると考えるはずですが、実際はWebサーバZがその処理を行っています。
リバースプロキシを使う目的
リバースプロキシを使うと、クライアントとWebサーバの間にワンクッションが入ることで、様々な恩恵が得られます。
例えば、
- 機密上の理由などでWebサーバをPublicにしたくないとき
- Webサーバをダウンせずに何かしらのPublicな通信を遮断したいとき(リバースプロキシだけダウンさせれば良い)
- 巨大なサイトを扱う場合(一つのWebサーバではトラフィックをさばけない。リバースプロキシの先に多数のWebサーバを用意することで、クライアントに近いサーバを選択的に使用できる)
などが挙げられます。
プロキシとリバースプロキシの違いまとめ
クライアントX → Y → サーバZ
という流れがあるとき
-
Y = プロキシ
:クライアントXはサーバZの存在を知っている -
Y = リバースプロキシ
:クライアントXはサーバZの存在を知らない