はじめに
サーバーを外部に公開したり、複数のアプリを1つの窓口でまとめたりする際に必ずと言っていいほど登場するのが「プロキシ」です。ただ、「プロキシ」「プロキシサーバー」「フォワードプロキシ」「リバースプロキシ」は似た言葉が並んでいて混同しやすい分野でもあります。
本記事では、これらの言葉の関係を整理しながら、それぞれの役割と用途をまとめます。
プロキシとは
「プロキシ(proxy)」は英語で「代理」を意味する言葉です。ネットワークの文脈では、クライアントとサーバーの間に立ち、通信を代わりに行うという考え方そのものを指します。
直接会話する代わりに、間に立つ人が代理でやり取りをするイメージです。この「間に立って代理する」という役割を実際のソフトウェア・サーバーとして実装したものが、次に説明する「プロキシサーバー」です。
プロキシサーバーとは
プロキシサーバーは、クライアントとサーバーの間に配置され、通信を中継する実体のあるサーバー(プログラム)です。
クライアントから見ると、本来の通信相手(オリジンサーバー)と直接つながっているように見えても、実際にはプロキシサーバーが間に入ってリクエストを受け取り、代わりに転送し、返ってきたレスポンスを中継しています。
プロキシサーバーが間に入ることで、次のようなことが可能になります。
| 機能 | 内容 |
|---|---|
| キャッシュ | 一度取得したレスポンスを保持し、同じリクエストに素早く応答する |
| フィルタリング/アクセス制御 | 特定の通信先への接続を許可・禁止する |
| 匿名化 | クライアントの実際のIPアドレスなどを隠す |
| 負荷分散 | 複数のサーバーにリクエストを振り分ける |
| SSL/TLS終端 | 暗号化通信の終端処理を代わりに行う |
| ログ集約 | 通信の記録を一箇所にまとめる |
プロキシサーバーには、どちら側に立つかによって大きく2つの種類があります。それが「フォワードプロキシ」と「リバースプロキシ」です。
フォワードプロキシとは
フォワードプロキシは、クライアント側に立つプロキシです。単に「プロキシ」と言った場合、こちらを指していることが多い、伝統的な形態です。
クライアント群の手前に配置され、クライアントがインターネット上のサーバーへアクセスする際、その通信を代理で行います。オリジンサーバー側からは、実際のクライアントではなく、フォワードプロキシと通信しているように見えます。
代表的な用途は次の通りです。
- 企業ネットワークで、社内から外部サイトへのアクセスを一箇所に集約し、アクセス制御やログ収集を行う
- キャッシュにより、よくアクセスされるコンテンツの取得を高速化する
- クライアントの実IPアドレスを隠して匿名性を高める
利用イメージとしては、「たくさんのクライアントが1つの窓口(フォワードプロキシ)を経由して、外の世界にアクセスしに行く」という構図です。
リバースプロキシとは
リバースプロキシは、サーバー側に立つプロキシです。フォワードプロキシとは逆に、1つまたは複数のオリジンサーバーの手前に配置され、外部のクライアントから届くリクエストを代理で受け取ります。
クライアント側からは、実際にリクエストを処理しているオリジンサーバーではなく、リバースプロキシと直接通信しているように見えます。オリジンサーバーの存在や構成をクライアントから隠す役割を持ちます。
代表的な用途は次の通りです。
- 複数アプリへの振り分け:1つのドメイン・ポートで受けたリクエストを、パスやホスト名に応じて複数のバックエンドサーバーへ振り分ける
- SSL/TLS終端:HTTPS証明書の管理をリバースプロキシに一元化し、背後のアプリはHTTPのままで済ませる
- 負荷分散(ロードバランシング):同じアプリの複数インスタンスにリクエストを分散する
- セキュリティ強化:オリジンサーバーのIPアドレスや構成を外部から隠す
- キャッシュ:静的コンテンツなどをリバースプロキシ側でキャッシュし、バックエンドの負荷を減らす
代表的なソフトウェアとしてはNginxやApache HTTP Serverが広く使われており、GUIで設定できるNginx Proxy Managerのようなツールも存在します。また、Cloudflareのようなサービスが提供する仕組みも、外部公開の手前で通信を中継するという意味で広義のリバースプロキシに位置づけられます。
フォワードプロキシとリバースプロキシの比較
| 項目 | フォワードプロキシ | リバースプロキシ |
|---|---|---|
| 立ち位置 | クライアント側 | サーバー側 |
| 代理する対象 | クライアントの代わりに外部へアクセス | サーバーの代わりに外部からのリクエストを受付 |
| 隠される対象 | クライアントの存在・IPアドレス | オリジンサーバーの存在・構成 |
| 主な用途 | アクセス制御、キャッシュ、匿名化 | 負荷分散、SSL終端、複数アプリの振り分け、セキュリティ強化 |
| 代表例 | 企業の社内プロキシ、Squid | Nginx、Apache、Cloudflare |
覚え方としては、「フォワード=クライアントの前(手前)に立って前へ送り出す」「リバース=サーバーの前に立って向きが逆」とイメージすると整理しやすくなります。
自宅サーバーでの活用イメージ
自宅で複数のWebアプリを動かして外部に公開したい場合、リバースプロキシは特に活躍します。
たとえば、アプリごとに個別のポートを外部に開放するのではなく、リバースプロキシを1つ窓口として立て、ドメイン名(サブドメインやパス)に応じて内部の各アプリへ振り分ける構成にすると、次のようなメリットがあります。
- 外部に公開するポートを最小限にできる
- SSL証明書の取得・更新をリバースプロキシ側に集約できる
- 背後のアプリのIPアドレスやポート構成を外部から隠せる
さらに、ルーターのポート開放自体を避けたい場合は、Cloudflare Tunnelのような「外部からの通信をトンネル経由で受け、内部のリバースプロキシへつなぐ」仕組みを組み合わせることで、自宅のグローバルIPアドレスを外部にさらさずに公開する構成も可能です。
まとめ
| 用語 | 内容 |
|---|---|
| プロキシ | クライアントとサーバーの間で通信を代理するという考え方 |
| プロキシサーバー | その代理を実際に行うサーバー(実体) |
| フォワードプロキシ | クライアント側に立ち、外部への通信を代理するプロキシ |
| リバースプロキシ | サーバー側に立ち、外部からの通信を代理で受け付けるプロキシ |