こんにちは、インフラエンジニアのryuです。
今回は、プロキシサーバーとは何か、どのような仕組みで通信しているのかを初心者向けに解説します。
プロキシという言葉は聞いたことがあっても、何を代理しているのか分からない方も多いのではないでしょうか。
簡単にいうと、プロキシサーバーはPCやサーバーの代わりに通信を中継するサーバーです。
この記事では、普段Webサイトを見るときの通信から確認しながら、フォワードプロキシとリバースプロキシの違い、利用するメリット、Squidを使った構築方法まで見ていきます。
プロキシサーバーとは?¶
プロキシは英語のproxyで、代理という意味があります。
その名前のとおり、プロキシサーバーはクライアントとWebサーバーの間に入り、HTTPやHTTPSなどの通信を中継します。
いきなり中継と言われても、少し分かりづらいですよね。
まずは、プロキシを使わずにWebサイトへアクセスするときの流れから確認してみましょう。
Webサイトを見るときはWebサーバーへアクセスしている¶
ブラウザでWebサイトを開くと、PCからWebサーバーへリクエストが送られます。
Webサーバーはそのリクエストを受け取り、HTMLや画像などのデータをレスポンスとして返します。

大まかには、次のような流れです。
PC → Webサーバー
PC ← Webサーバー
この流れを図にすると、次のようなイメージです。

つまり、私たちがWebページを見る裏側では、PCとWebサーバーの間で通信が行われています。
ネットワークの基本から整理したい方は、こちらの記事も参考にしてください。
【関連記事】ネットワークの勉強は何から始めればいい?学習ロードマップを解説
プロキシを使うと通信の途中にサーバーが入る¶
では、プロキシサーバーを使うとどうなるのでしょうか。
PCからWebサーバーへ直接アクセスするのではなく、いったんプロキシサーバーへリクエストを送ります。
PC → プロキシサーバー → Webサーバー
PC ← プロキシサーバー ← Webサーバー
プロキシサーバーがPCの代わりにWebサーバーへアクセスし、受け取ったレスポンスをPCへ返します。

Webサーバーから見ると、直接通信している相手はプロキシサーバーになります。
ただし、実際の環境ではForwardedやX-Forwarded-ForなどのHTTPヘッダーを使い、元のクライアント情報を後段のサーバーへ伝える構成もあります。そのため、必ずクライアントのIPアドレスが分からなくなるわけではありません。
プロキシサーバーには2つの種類がある¶
プロキシを理解するときに大切なのが、フォワードプロキシとリバースプロキシを分けて考えることです。
元の記事では両方の役割をまとめて説明していましたが、実際には誰の代理になるかが異なります。
| 種類 | 誰の代理か | 主な用途 |
|---|---|---|
| フォワードプロキシ | PCなどのクライアント | Webアクセス制御、ログ取得、通信の中継 |
| リバースプロキシ | Webサーバー | 負荷分散、TLS終端、キャッシュ、サーバー保護 |
一般的に社内PCのWebアクセスを中継するプロキシといえば、フォワードプロキシを指すことが多いです。
一方、NginxなどをWebサーバーの前に配置してアクセスを振り分ける構成では、リバースプロキシが使われます。
フォワードプロキシ¶
フォワードプロキシは、クライアントの代理として外部へアクセスするプロキシです。
会社や学校などで、利用者のPCからインターネットへの通信を決められたプロキシ経由にする構成があります。
社内PC
↓
フォワードプロキシ
↓
インターネット
アクセス先を制御したり、通信ログを残したりするときに利用できます。
リバースプロキシ¶
リバースプロキシは反対に、Webサーバー側の代理としてアクセスを受け付けるプロキシです。
インターネット
↓
リバースプロキシ
↓
WebサーバーA
WebサーバーB
複数のWebサーバーへアクセスを振り分けたり、実際のWebサーバーを直接インターネットへ公開しない構成にしたりできます。
ロードバランサーやCDNなども、仕組みを理解するときにリバースプロキシと共通する部分があります。
フォワードプロキシを使う主な理由¶
では、会社などでフォワードプロキシを使うと何が便利なのでしょうか。
昔はキャッシュによる通信量削減が大きな目的の1つでしたが、現在はHTTPSや動的コンテンツが増えているため、アクセス制御やログ管理、セキュリティ対策を目的に利用するケースも重要です。
Webサイトへのアクセスを制御できる¶
プロキシを経由させることで、アクセス先に応じて通信を許可したり拒否したりできます。
たとえば業務上必要のないサイトや、セキュリティ上危険と判断されたサイトへのアクセスを制限する使い方です。

ただし、プロキシを導入しただけですべての危険な通信を防げるわけではありません。
現在の企業ネットワークでは、DNSフィルタリング、Webフィルタリング、EDR、ファイアウォールなど、複数の仕組みを組み合わせてセキュリティを高めることが一般的です。
Webアクセスのログを残せる¶
利用者のWebアクセスをプロキシへ集約すると、いつ、どこへ通信したのかをログとして記録できます。
障害調査やセキュリティインシデントの調査で、あとから通信状況を確認できるのは大きなメリットです。
ただし、HTTPS通信の中身をどこまで確認できるかは構成によって異なります。
企業によってはTLSを検査する仕組みを導入することもありますが、証明書の管理やプライバシーへの配慮も必要になるため、単純にプロキシを置けばHTTPSの中身まですべて見えるわけではありません。
キャッシュで通信量を減らせる場合もある¶
プロキシには、取得したコンテンツをキャッシュして再利用する機能もあります。
同じデータへのアクセスが繰り返される環境では、外部への通信量やWebサーバー側の負荷を減らせる場合があります。
ただし現在のWebサイトはHTTPSやユーザーごとに内容が変わるページも多く、昔ほど単純にWebページ全体をキャッシュできるとは限りません。
プロキシ=Web表示を高速化するものと覚えるより、通信を中継し、その途中で制御や記録などを行える仕組みと理解する方がよいでしょう。
HTTPSはプロキシをどう通る?¶
現在のWebサイトではHTTPSが当たり前になっています。
HTTPSへフォワードプロキシ経由で接続するときには、HTTPのCONNECTメソッドを利用して、クライアントと接続先の間にトンネルを作る方法があります。
PC
↓ CONNECT
プロキシ
↓
HTTPSサイト
この場合、プロキシは通信経路を中継しますが、通常は暗号化されたHTTPSの内容をそのまま読むわけではありません。
このあたりを理解すると、プロキシとHTTPS、TLS、証明書の関係も見えてきます。
Squidでプロキシサーバーを構築できる¶
フォワードプロキシを実際に作ってみたい場合は、LinuxでSquidを利用できます。
SquidはプロキシやWebキャッシュなどに利用されているオープンソースソフトウェアです。
Ubuntu系のLinuxであれば、たとえば次のようにインストールできます。
sudo apt update
sudo apt install squid
インストール後はサービスの状態を確認します。
sudo systemctl status squid
Squidではsquid.confにACLを定義し、http_accessで通信を許可・拒否できます。
acl mynetwork src 192.168.1.0/24
http_access allow mynetwork
http_access deny all
これは192.168.1.0/24からのアクセスを許可し、それ以外を拒否する簡単なイメージです。
プロキシを外部へ無制限に公開すると第三者に悪用される危険があるため、アクセス元を適切に制限することが重要です。
Squidの具体的な設定はこちらの記事で解説しています。
【関連記事】Squidの設定方法を初心者向けに解説
アクセス先を制限する方法はこちらも参考にしてください。
【関連記事】Squidでアクセス制限を設定する方法
プロキシを理解するとネットワークが分かりやすくなる¶
プロキシサーバーは、単にPCの代わりにWebサイトを見るサーバーではありません。
フォワードプロキシならクライアント側の通信を中継し、リバースプロキシならWebサーバー側でアクセスを受け付けます。
この違いを理解しておくと、ファイアウォールやロードバランサー、CDNなどを勉強するときも理解しやすくなります。
InfraAcademyでは、ネットワークやLinux、サーバー構築、セキュリティなどを、実際に手を動かしながら学べます。
プロキシの説明を読んでもIPアドレスやHTTP、ポート番号の部分で難しく感じた方は、ネットワークの基礎から順番に学んでみるのがおすすめです。
まずは、フォワードプロキシはクライアントの代理、リバースプロキシはサーバーの代理と覚えておきましょう。
この2つを区別できれば、プロキシサーバーの基本はかなり理解できています。



