定義
リバースプロキシ(Reverse Proxy)は、インターネットの利用者と実際のWebサーバーの間に立って、リクエストを代わりに受け取り、取り次ぐ中継サーバーです。訪問者が社内システムに直接アクセスできないようにしつつ、複数台のサーバーに仕事を均等に振り分け、サイトのセキュリティと速度をあわせて高める玄関口の役割を果たします。
ホテルのロビーのフロントを思い浮かべてみましょう
お客さんはホテルに入ると、客室や厨房にいきなり勝手に入っていくことはありません。1階ロビーのフロントに立ち寄って用件を伝えると、スタッフが適切な部屋を案内したり、担当部署に連絡したりして、必要なサービスを提供してくれますよね。
多くのWebサイト、特に規模の大きなサービスは、これとよく似た仕組みで動いています。スマホやパソコンでWebサイトを開くとき、実際のデータやプログラムが動いている本体のコンピューター(Webサーバー)に、すぐには接続されないことが多いのです。入口でどっしり構えているリバースプロキシが、お客さんのリクエストをまず出迎えます。
よく耳にするプロキシ(フォワードプロキシ)は、利用者の側に立って、利用者の身元を隠してくれる代理人の役割をします。反対にリバースプロキシは、サーバー側の入口を守る門番として、内部の本物のサーバーがどこに何台あるのかを外から見えないようにしっかり隠す役割を担います。
門番を置くと何がよくなるの?
まず得られるのは、強力なセキュリティです。ハッカーは、リバースプロキシの裏に隠れている本物のサーバーの実際のアドレス(IPアドレス)を突き止めにくくなります。ただし、過去の記録や設定ミスでアドレスが漏れてしまうこともあります。外部から来るDDoS攻撃や怪しい悪意あるリクエストを、門番のサーバーが第一の防衛線で食い止められるので、重要なシステムを守るのに役立ちます。
お客さんがどっと押し寄せたときの、仕事の分担もお手のものです。1台のサーバーだけに注文が殺到してダウンしないよう、後ろに用意した複数のサーバーに仕事を均等に振り分ける負荷分散(ロードバランシング)を行います。
さらに、訪問者がよく見る画像やWebページをプロキシが覚えておいて、すぐに取り出して渡す「キャッシュ」の技術も発揮します。複雑な計算を経る必要がなく、門番が入口でそのまま品物を渡してくれるので、利用者が画面を目にするまでの応答速度がぐっと速くなります。
もう少し正確にいうと
リバースプロキシは、複雑なセキュリティの鍵を開け閉めする暗号化の処理(SSL/TLS処理)を引き受けることもあります。多くの場合、利用者とやり取りする暗号化されたデータをプロキシが前面で代わりに復号し、内部ネットワークにつながるサーバーには復号した状態で渡すことで、内部サーバーの処理負担を軽くします。ただし設定によっては、復号せずにそのまま渡したり、安全のために内側の区間をあらためて暗号化したりすることもあります。
また、サイトのメンテナンスや新機能のアップデートのときにも便利です。サーバーをいったん止めなければならないときも、お客さんにエラー画面を見せず、正常に動いている別のサーバーへ経路をそっと切り替えて、ダウンタイムなしのデプロイ(無停止デプロイ)を助けてくれます。
今日、私たちが日常的に使う巨大なポータルサイトやショッピングアプリは、NginxやHAProxyのようなソフトウェアや、Cloudflareのようなサービスをリバースプロキシとして使い、何億件ものトラフィックを安全かつスムーズにさばいています。
よくある誤解
リバースプロキシと一般的なプロキシ(フォワードプロキシ)は、名前が違うだけで完全に同じものだ。
フォワードプロキシは利用者の代理として利用者の身元を隠しますが、リバースプロキシはサーバーの代理としてサーバーの実際の場所や内部構造を隠します。守る対象がちょうど正反対です。
日常で出会う場面
アクセスが殺到する大学の履修登録サイトで、トラフィックを複数のサーバーに分けて分散させるときに使われます。
ハッカーの直接攻撃からデータベースや主要なWebサーバーを隠すために、入口に設置します。
つまり ひとことで
リバースプロキシは、サーバーの手前でリクエストを代わりに受け取り、セキュリティを守って負荷を分けてくれる、頼れる門番サーバーです。