リバースプロキシとは
リバースプロキシの役割
例えば以下のようなシンプルなサーバシステムがあったとします。
ここにリバースプロキシを導入した場合は以下のうような構成になります。
このような構成をすることでWebサーバが直接クライアントからの要求を受け付けるのではなく、一旦リバースプロキシが受け取りそれをWebサーバに送るようにできます。
つまりはWebサーバの代理の役割をプロキシサーバが行います。
さらにはリバースプロキシではWebサーバに送る前に処理を行ったり、複数のWebサーバがあった場合送るWebサーバをクライアントのリクエスト内容により変えることができます。
リバースプロキシのメリット
ではリバースプロキシを用いることで以下のようなメリットがあります。
- HTTPリクエスト内容に応じたサーバの選択
- URLの書き換え
- システム全体のメモリ効率の向上
- Apacheモジュールを利用した処理の制御
これらのメリットついて詳しく見ていきます。
HTTPリクエスト内容に応じたサーバの選択
例えばクライアントから
のような画像のリクエストと
のような動的コンテンツのリクエストがきたとします。
ここでリバースプロキシを使用していると画像のリクエストは画像用のWebサーバに、動的コンテンツのリクエストは動的コンテンツ用のWebサーバに振り分けることができます。
リクエスト内容だけでなくIPアドレスでの制御も可能です。
IPアドレスの制御ができることにより悪意のあるホストからのリクエストの遮断や特定のIPのみからしかアクセスできない管理者向けページができます。
URLの書き換え
例えば以下のようなURLがあったとします。
http://xxxx/yyyy.php?id=3&val1=tokyo&val2=japan&val3=sample
これを綺麗に見せるために
http://xxxx/yyyy.php/3/tokyo/japan/sample
としてクライアントにアクセスしてもらいリバースプロキシで
http://xxxx/yyyy.php?id=3&val1=tokyo&val2=japan&val3=sample
に戻すしWebサーバにアクセスするといったことが可能です。
システム全体のメモリ効率の向上
動的コンテンツ(phpやperlなど)は静的コンテンツ(css・html・javascript・画像など)など比較しより多くのメモリが必要になります。
また動的コンテンツに対応しているサーバ(APサーバ)では1リクエストに対して1プロセス/スレッドで応答する場合に静的コンテンツに対しても消費メモリが大きい1プロセス/スレッド使ってしまいます。
そこで動的コンテンツと静的コンテンツでサーバを分けることによりメモリ効率の向上を行います。
Apacheモジュールを利用した処理の制御
リバースプロキシにApacheを用いた場合Apacheモジュールを組み込んでHTTPリクエストの前処理・後処理として任意のプログラムを使用することができます。
例えば以下のようなものがあります。
最後に
本記事ではリバースプロキシとはどうものなのかとメリットについて簡単に説明しました。リバースプロキシを導入することで様々なメリットがあるので基本的にはどんな環境でも導入したほうが良い中と思います。
デメリットとしてはリバースプロキシに関する知識が必要なことぐらいなんですかね。
デメリットは調べてみたんですがあまりでてきませんでした・・・
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
この記事はほぼサーバなどを触ったことがない人物が学んだことを整理するために書いていますので間違いなどが多々あると思います。間違いなどありましたら是非コメントなどで教えていただけると幸いです。