リバースプロキシとは?仕組みや用途を解説!

リバースプロキシとは?仕組みや用途を解説!のアイキャッチイメージ

リバースプロキシとは?

リバースプロキシは、代理人のような形でクライアントとWebサーバの間に入り、クライアントからの要求や、サーバからの応答を中継する装置です。幅広い用途で使用されるリバースプロキシは、インフラ構築において重宝される存在です。インターネットからの不正アクセスを防止したり、負荷を分散したりと、その用途は多岐にわたります。この記事では、実用的なリバースプロキシの使い方を例とともに解説します。

リバースプロキシの仕組み

リバースプロキシの基本的な役割としてあげられるクライアントからの要求やサーバからの応答を中継するというのはどういうことなのか、一般的なhttpアクセスを例に仕組みを説明します。以下は、クライアントがリバースプロキシの配置されているwww.example.comにアクセスしたときの流れです。

  • クライアントがwww.example.comにアクセスすると、そのリクエストはリバースプロキシが受け取る。
  • リバースプロキシはWebサーバーに対して、自分自身をクライアントとしてリクエストを転送する。
  • Webサーバーは、リバースプロキシに対して応答を返す。
  • リバースプロキシはクライアントに対して、自分自身をサーバとして応答を返す。

ここで重要なことがあります。それはクライアントからは、自身のリクエストに対する応答をするWebサーバーにみえるのは、リバースプロキシだということです。実際に存在するWebサーバの存在は隠蔽され、リバースプロキシがWebサーバのように振る舞います。また、リバースプロキシは、クライアントからのリクエストをWebサーバに転送するか否か、などといった選択ができるのです。

プロキシとリバースプロキシの違い

リバースプロキシとは似て非なるものであるプロキシについて説明します。プロキシとリバースプロキシの大きな違いは、Webサーバの存在が隠蔽されるかどうかという点です。プロキシは、リバースプロキシと異なり、Webサーバの存在は隠蔽されません。クライアントとWebサーバーの間に入り、代理人のような仕事だけをするのが、プロキシの特徴です。

プロキシを使うメリットとは?

では、プロキシを使うメリットはどこにあるのでしょうか。答えは、クライアントからWebサーバへのアクセスが遮断されていたとしても、リバースプロキシを中継することでアクセスできる点です。たとえば、クライアントのIPアドレスがWebサーバのアクセス制限にかかっていたとしても、プロキシを経由する場合は、Webサーバから見たクライアントがプロキシになるので、何の問題もないということです。これは、非常に大きなメリットといえます。

リバースプロキシの用途

これまで、リバースプロキシの仕組みについて説明しました。次に、リバースプロキシのさまざまな用途について説明します。リバースプロキシは、これまでに説明した仕組みのおかげで、負荷分散やキャッシュなど、さまざまな用途に利用できます。ここでは用途のうち、実用的な7つをご説明します。

負荷の分散

リバースプロキシを1台用意することで、クライアントに対して単一サーバーとして振る舞えます。つまり、リバースプロキシの裏側にWebサーバーが何台配置されていても、クライアントからはリバースプロキシ1台にみえるのです。これにより、クライアントには単一サーバとして振る舞いながら、大量のアクセスを処理することが可能なシステムを構築できます。この考え方は、ロードバランサーという負荷分散に特化したものと同じです。

セキュリティ強化

リバースプロキシがクライアントからの要求を受け取る際、その要求を解析することで、セキュリティの強化に役立ちます。具体的な方法として、以下があげられます。

  • クライアントのIPアドレスを限定するIP制限
  • Basic認証
  • マルウェアスキャン

これらは、どれも不特定多数のアクセスを遮断する効果があります。このような手法を用いることで、Webサーバーやそこで稼働するアプリケーションなどがインターネット上に晒されることがなくなるので、セキュリティの強化として非常に有効です。

SSL通信の肩代わり

リバースプロキシ1台が、多くのWebサーバーへのアクセスを中継する場合、SSLによる暗号化は、クライアントとリバースプロキシの間で済みます。Webサーバー全てをSSLに対応させる必要がなく、証明書の管理が最小限で良いのが魅力です。クライアントからはhttpsによる安全な通信が担保され、リバースプロキシからWebサーバーは、httpで通信することが可能になります。

異なるアプリケーションの統合

リバースプロキシ1台に対して、役割の異なるWebサーバーを複数用意することで、1つのURL(IPアドレス)に異なるアプリケーションを統合できます。たとえば、hoge.example.comの場合、PHPによる動的ページを応答させる、fuga.example.comの場合、静的ページを応答させる、といったことが可能になります。今回はサブドメインを利用した例ですが、example.com/hoge/など、パスを利用する方法もあります。

Webサーバの応答のキャッシュ

クライアントからのアクセス頻度が多いコンテンツの内容をキャッシュさせることで、クライアントの待ち時間を減らす効果や、Webサーバへの負荷を減らす効果があります。以下は、リバースプロキシでキャッシュの設定をしたうえで、異なるクライアントAとBが同じURL(www.example.com)にアクセスした際の流れです。

  • クライアントAがwww.examole.comにアクセスする。
  • リバースプロキシは、Webサーバにリクエストを転送する。
  • リバースプロキシは、Webサーバからの応答をクライアントAに返すと同時に、自身でキャッシュする。
  • クライアントBがwww.example.comにアクセスする。
  • リバースプロキシはWebサーバーにアクセスせず、キャッシュした内容をクライアントBに返す。

異なるクライアントによる同じアクセスの場合、Webサーバー側で変更されない限りは、Webサーバの応答内容は同じです。応答内容をキャッシュすることで、クライアント側にもWebサーバー側にもメリットがあります。ただし、Webサーバに変更を加えた場合は、リバースプロキシのキャッシュ内容を削除する必要があります。削除しないとキャッシュが消えるまでの間、クライアントには変更前のコンテンツを見せてしまいます。

URLの書き換え

長く煩雑なURLは、クライアントを困惑させてしまいます。しかし、Webサーバ側の事情で、URLが長くなってしまうパターンがあります。このような場合、リバースプロキシには短いURLでアクセスし、リバースプロキシ内でURLを書き換えたうえで、Webサーバにアクセスする手法を用いることで、クライアントとサーバの両方のニーズを満たせます。

グローバルIPアドレスの節約

複数のWebサーバを用いて異なるコンテンツを配信する場合、リバースプロキシを使わなければ、Webサーバの数だけグローバルIPを確保する必要があります。グローバルIPの確保は簡単ですが、確保した分だけ費用がかかります。「異なるアプリケーションの統合」で説明したような構成にすることは、アプリケーションを統合できるだけでなく、グローバルIPアドレスを節約することにもつながるのです。

リバースプロキシの設定をしてみよう

ここまで、リバースプロキシを用いる利点などを説明してきました。リバースプロキシの構築方法には触れませんが、リバースプロキシを設定する方法として代表的なのは、Apacheやnginxといったツールを使うことです。どちらもサーバに使われるツールですが、リバースプロキシの役割も果たします。一度これらを利用してリバースプロキシを構築してみることで、さらに理解を深められるでしょう。