【図解】リバースプロキシとフォワードプロキシの違いって何?
プロキシには複数の種類があります。一番代表的なものがフォワードプロキシで、単にプロキシと呼ぶ場合このフォワードプロキシを指します。次によく使われるのがリバースプロキシです。
この記事では文字だけでは分かりにくいリバースプロキシとフォワードプロキシの違いについて図を用いて解説します。
リバースプロキシとフォワードプロキシの違い
プロキシについて正しく理解するためにはいくつかのIT用語を知っていただく必要があります。まずはそれらのIT用語について説明し前提知識を身に着けていただいたたのちに、リバースプロキシとフォワードプロキシの違いを解説します。
前提知識
プロキシは「代理」という意味の英語です。プロキシはその名の通り通信を代理で行います。
フォワードプロキシとリバースプロキシの違いは誰の代役をするかという点にあります。
フォワードプロキシとリバースプロキシの違いを正しく理解するため、まずは"クライアント“と"サーバー“というIT用語の意味を知る必要があります。"サーバー"はサービスやデータを提供してくれるマシンです。一方"クライアント"は"サーバー"に対して情報提供を依頼し、情報を受け取るマシンです。
YouTubeを例に図解します。
YouTubeは動画という情報を持っています。YouTubeを見たい人は「動画をくれ!」とお願いし、それに応じてYouTubeは動画を渡します。情報を要望する行為を"リクエスト“と言い、要望に応じた返答を"レスポンス“と言います。
リクエストするのがクライアント、レスポンスするのがサーバーです。Chromeやsafariなどのブラウザはサーバーに対してリクエストする機能と、サーバーから受け取ったレスポンスを表示する機能を持っています。そのため、図ではクライアントを人と記載していますが、実際クライアントにあてはまるのはブラウザだと考えてもらって問題ありません。
フォワードプロキシとは
フォワードプロキシは誰の代役をするのでしょうか?答えはクライアントです。先程と同じくYouTubeを例に出して詳細に説明します。
クライアント1とクライアント2はYouTubeと通信をする際、プロキシを通るよう設定していたとします。その場合、クライアントとサーバーが直接やりとりをした時とを比較してみると、最終的にクライアントの元に動画が届く点に変わりはないのですが、以下の点で異なります。
- YouTube(サーバー)はどの人(クライアント)とやりとりをしたのか分からない
上の図の例で言うと、YouTubeはあくまでプロキシとしかやりとりをしていないので、クライアント1からのリクエストなのかクライアント2からのリクエストなのかを知ることができません。
サーバーはインターネット上にあることが多いです。中にはクライアントの情報を盗み取って悪用しようとする良くないサーバーも存在します。フォワードプロキシはそんな悪意を持ったサーバーからクライアントの情報を隠蔽し守る機能を持っています。
リバースプロキシとは
ではリバースプロキシは誰の代役をするのでしょうか?答えはサーバーです。こちらもYouTubeの例にあげて図解します。
YouTubeのようなとても人が集まるサービスを安定して提供し続けるには、1台だけではなく複数台のサーバーが必要です。そんなときに役立つのがリバースプロキシです。
リバースプロキシは総合病院の窓口をイメージしてもらえると分かりやすいと思います。クライアントがリクエストを送ったら窓口であるリバースプロキシがリクエストを解析して、しかるべきサーバーにリクエストを代理で送ります。サーバーからレスポンスを受け取ったリバースプロキシはクライアントにレスポンスを送ります。これがリバースプロキシが行なっていることです。
YouTubeの例えで言うと、クライアントがある動画を見たいとリクエストしたら、一度リバースプロキシがリクエストを受け取り、負荷があまりかかってないサーバーを見つけてリクエストを転送するイメージです。このように負荷分散させる機能があります。
使われ方
リバースプロキシには多くの役割があります。
- 負荷分散機能
- 高負荷が予想されるときに複数台サーバーをたてて、リバースプロキシを中間におけば一台のサーバーに負荷を集中させることなく、負荷を分散させることができます。窓口の方がお医者さんの忙しさを見て、誰にお願いするのか決めるイメージです。
- 最適なサーバーの選択
- サーバーによって得意なことが異なる場合があります。あるサーバーは長時間動画の処理が得意、あるサーバーはショート動画の処理が得意など。そういったときにクライアントからのリクエストの内容に応じて最適なサーバーを選んで転送する機能があります。窓口の方が患者の症状を見て適切な科のお医者さんを選ぶイメージです。
- サーバーにかかる負荷の軽減
- リクエストの内容が不正確だったり悪意がありそうとリバースプロキシが判断した場合、リバースプロキシはサーバーにリクエストを送ることなく、クライアントに直接レスポンスを返します。その結果サーバーは余計なリクエストを処理する必要がなくなります。
- サーバーを守る
- サーバーに対して悪意のあるリクエストを送るクライアントもいます。俗に言うハッカー(正確にはクラッカー)です。サーバーには重要なユーザーのパスワード情報など大切なデータが保存されていることがあるので直接サーバーに対してリクエストが来たらデータを消されたり、改ざんされてしまったりする恐れがあります。しかしリバースプロキシがリクエストの内容を怪しいと判断した場合はサーバーに処理を転送しないことが出来るので、重要なデータが保持されているサーバーを守ることができます。
まとめ
リバースプロキシとフォワードプロキシの違いはクライアントとサーバーのどちらの代理かです。リバースプロキシはサーバーの代理をすることでサーバーをいろんな形で守ります。
大きなサービスを立ち上げようと思ったときにはリバースプロキシの役割を思い出していただいて、設計に組み込むと良いでしょう
リバースプロキシとしてよく利用されるのがnginxです。こちらも覚えておきましょう。
この記事を読んだ方におすすめの記事
最後にこの記事を読んでくれた方におすすめの記事も紹介しておきます。
プロキシとよく混同されがちなゲートウェイについて以下の記事で解説しているのでご覧ください。
またPCのネットワーク設定をするときによく出てくるデフォルトゲートウェイの本当の意味について以下の記事で解説しているので、こちらもご覧ください。