リバースプロキシ(Reverse Proxy):90秒の動画で学ぶITキーワード
Webシステムにしばしば登場する「リバースプロキシ」。Webサーバの負荷分散や統合、セキュリティ対策などに利用されるという。その仕組みや実際の用途、メリットとは? 90秒の解説動画も追加!
リバースプロキシ(Reverse Proxy)とは、クライアントとサーバの通信の間に入って、サーバの応答を「代理(proxy)」しつつ通信を中継する機能、あるいはその役割を担うサーバのこと。Webシステムのセキュリティ対策や性能向上、負荷分散、あるいはシステム構成の自由度向上などのためによく利用される。
リバースプロキシの基本的な仕組み
リバースプロキシが代理で応答するとはどういうことなのか、下図でもう少し細かく説明しよう。
リバースプロキシの基本的な仕組み
ここではインターネットに設置されたHTTPのリバースプロキシを例に挙げている(実際には他のプロトコルに用いられることもある)。
(1)クライアント(図中のノートPC)のWebブラウザで「http://www.example.jp/」を開くと、www.example.jpを割り当てられているリバースプロキシのサーバに対して、リクエストが送信される。
(2)リバースプロキシは(1)を受けて、自身をクライアントとして(1)のリクエストを改変しつつ、Webサーバ(192.168.0.111)にリクエストを転送する。
(3)Webサーバは(2)を受けて、(この場合のクライアントである)リバースプロキシに応答を返す。
(4)リバースプロキシは(3)を受けて、自身をサーバとしてクライアント(図中のノートPC)に応答を返す。このように応答の実体はWebサーバ(192.168.0.111)が生成している一方で、クライアントにとっては、リバースプロキシ(www.example.jp)がその応答を返しているように見える。
このように応答の実体はWebサーバなどが生成するものの、クライアントから直接アクセスされるのはリバースプロキシであり、Webサーバの存在は隠匿される。これがリバースプロキシのさまざまなメリットにつながっている(後述)。
ちなみに「リバース(Reverse)」の付かない「プロキシ」は、クライアントからのリクエストを代理して、クライアントを隠ぺいしつつWebサーバなどと通信するサーバを指す。企業内に設置され、認証されたクライアントだけにインターネットへのアクセスを許可するのによく用いられる。
リバースプロキシのさまざまな用途とその効果
上図のリバースプロキシは単純化しているが、実際のリバースプロキシには複数の機能が実装されており、もっと複雑だ。以下では用途ごとに分類してリバースプロキシの各機能と効果(メリット)を説明する。
●負荷分散によるスループット向上
クライアントから大量のアクセスが想定される場合、同じ処理をするWebサーバ/アプリを複数用意しておき、リバースプロキシによってリクエストを分散させる。クライアントからは単一サーバ構成と変わらないように維持しつつ、大量のアクセスをさばけるシステムを構築できる。
●キャッシュや圧縮による高速化
リバースプロキシでデータのキャッシングや圧縮をすることで、Webサーバ/アプリに大幅な変更を加えることなく、高速化やスループット向上が期待できる。
●異なるアプリやフレームワーク、プラットフォームの統合
上図はURLに含まれるパスに応じて、別々のWebサーバ/アプリが応答するシステムの例だ。Webサーバ/アプリそのものを統合することなく、それぞれ単体のまま、クライアントからは単一サーバ(単一サイト)のように見せかけることができる。
●セキュリティの強化
上図は社内ネットワークなどに設置したWebサーバ/アプリをインターネットから参照する場合の例だ。DMZに設置したリバースプロキシを経由しているため、(重要なデータを扱っている)Webサーバ/アプリは直接インターネットに接する必要がない。さらに、リバースプロキシ上でWebアプリケーションファイアウォールなどのセキュリティ対策をすれば、Webサーバ/アプリに直接手を加えることなく安全性を高められる。
●SSLの集中管理
上図の構成の場合、クライアントとリバースプロキシ間の通信路はSSL(TLS)で暗号化される。一方、リバースプロキシは通信内容を復号して、Webサーバ/アプリと暗号化せずに通信する(ただし第三者に通信が傍受されたり改ざんされたりしないという前提が必要)。Webサーバ/アプリをそれぞれHTTPSに対応させることなく、インターネット上の通信路を暗号化することが可能だ。
リバースプロキシの実装
オープンソースソフトウェアで特に有名なものとして、「Apache」と「nginx」が挙げられる。本来これらはWebサーバソフトウェアなのだが、リバースプロキシの機能も備えている。
また、HTTPアクセラレータとしては「Varnish HTTP Cache」がよく知られている。
Windows Server+IISでは、マイクロソフト提供の「Application Request Routing(ARR)」というモジュールがリバースプロキシとして利用できる。これをIISに組み込むと、バックエンドにある複数のサーバを束ねた「サーバファーム」を構築できる。
Application Request Routing(ARR)を組み込んだIISの管理コンソール
筆者が実際にリバースプロキシとして運用しているサーバの管理コンソールである。
(1)バックエンドのWebサーバを束ねた「サーバファーム」。リバースプロキシのサーバに届くリクエストを、ホスト名(ドメイン名)やパスに応じて、これらのバックエンドサーバに適宜転送(ルーティング)している。
(2)ARRで設定できる項目。プロキシの他、キャッシュや死活監視、負荷分散などの設定が可能だ。
■更新履歴
【2016/12/08】90秒の解説動画を追加しました。
【2016/08/25】初版公開。
Copyright© Digital Advantage Corp. All Rights Reserved.