この記事の要点
• フォワードプロキシはクライアント側の代理、リバースプロキシはサーバー側の代理
• フォワードプロキシは匿名化やキャッシュに使われ、リバースプロキシは負荷分散や SSL 終端に使われる
• nginx / Cloudflare など主要ツールはどちらも対応可能
プロキシとは
プロキシ(Proxy)とは、クライアントとサーバーの間に入り、通信を仲介・中継するサーバーのことです。「代理」という意味の通り、クライアントやサーバーの代わりに通信を行います。
なぜ必要か: 直接通信ではなくプロキシを経由することで、セキュリティ強化、パフォーマンス改善、アクセス制御などが可能になります。
フォワードプロキシとリバースプロキシの違い
プロキシには大きく分けて2種類あります。どちらの側の代理をするかで役割が異なります。
| 項目 | フォワードプロキシ | リバースプロキシ |
|---|---|---|
| 代理する側 | クライアント側 | サーバー側 |
| 設定する側 | クライアント(ユーザー)が設定 | サーバー管理者が設定 |
| クライアントから見た位置 | 自分の前(明示的に設定) | サーバーだと思って接続 |
| 主な用途 | 匿名化、キャッシュ、アクセス制御 | 負荷分散、SSL 終端、キャッシュ |
| 典型例 | 企業の社内プロキシ、VPN | nginx、HAProxy、Cloudflare CDN |
フォワードプロキシの動作
[クライアント] → [フォワードプロキシ] → [インターネット] → [サーバー]
↑ ↑
設定する クライアントの代理
クライアントが「このプロキシ経由で通信してください」と設定します。サーバーから見ると、プロキシの IP アドレスからアクセスされているように見えます。
リバースプロキシの動作
[クライアント] → [インターネット] → [リバースプロキシ] → [バックエンドサーバー]
↑ ↑
サーバーの代理 複数台に分散可能
クライアントは何も設定せず、通常通りサーバーにアクセスします。実際にはリバースプロキシが受け取り、背後のサーバーに転送します。
ポイント: フォワードプロキシはクライアントを隠し、リバースプロキシはサーバーを隠す構造です。どちらも「中継」という意味では同じですが、目的と設定者が異なります。
フォワードプロキシの典型的な用途
1. 匿名化・プライバシー保護
クライアントの IP アドレスを隠してサーバーにアクセスできます。
# curl でプロキシ経由アクセス
curl -x http://proxy.example.com:8080 https://api.example.com/
2. アクセス制御・フィルタリング
企業ネットワークで特定サイトへのアクセスを制限したり、ログを記録したりします。
社員 PC → 社内プロキシ → インターネット
↑
許可リスト / ブロックリスト
アクセスログ記録
3. キャッシュによる高速化
よくアクセスされるコンテンツをプロキシ側でキャッシュし、外部へのリクエストを削減します。
実践メモ: Squid や Privoxy などがフォワードプロキシとして有名です。ブラウザの「プロキシ設定」で指定するのがフォワードプロキシです。
リバースプロキシの典型的な用途
1. 負荷分散(ロードバランシング)
複数のバックエンドサーバーにリクエストを振り分け、負荷を分散します。
# nginx のリバースプロキシ設定例
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
2. SSL/TLS 終端
リバースプロキシで HTTPS を終端し、バックエンドへは HTTP で転送します。証明書管理を一元化できます。
[クライアント] --HTTPS--> [リバースプロキシ] --HTTP--> [バックエンド]
↑
SSL 終端
証明書はここだけ
3. キャッシュ・CDN
静的コンテンツをエッジサーバー(リバースプロキシ)でキャッシュし、オリジンサーバーへの負荷を減らします。
# nginx のキャッシュ設定例
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m;
server {
location /static/ {
proxy_cache my_cache;
proxy_pass http://backend;
}
}
4. セキュリティ強化
バックエンドサーバーを外部から隠蔽し、攻撃の対象範囲を限定します。
ポイント: リバースプロキシは単一のエントリーポイントとして機能します。クライアントからは1台のサーバーに見えますが、裏側では複数のサーバーが処理を分担しています。
主要ツールとその位置付け
| ツール | フォワードプロキシ | リバースプロキシ | 特徴 |
|---|---|---|---|
| nginx | ○(設定次第) | ◎(主用途) | 高性能、設定が柔軟、静的コンテンツ配信も得意 |
| Apache httpd | ○(mod_proxy) | ○(mod_proxy) | 老舗、リバースプロキシより Web サーバーとして有名 |
| HAProxy | × | ◎ | 負荷分散特化、L4/L7 対応、高可用性 |
| Squid | ◎(主用途) | ○(設定次第) | フォワードプロキシの定番、キャッシュ得意 |
| Cloudflare CDN | × | ◎ | グローバル CDN、DDoS 対策、WAF 機能付き |
| Envoy | × | ◎ | サービスメッシュで人気、動的設定可能 |
nginx の設定例比較
# フォワードプロキシ設定(簡易版)
server {
listen 8080;
resolver 8.8.8.8;
location / {
proxy_pass $scheme://$host$request_uri;
}
}
# リバースプロキシ設定
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
注意: nginx をフォワードプロキシとして使う場合、セキュリティ設定が不十分だとオープンプロキシになり、第三者に悪用される危険があります。本番環境ではallow/denyでアクセス制限を必ず設定してください。
Cloudflare の位置付け
Cloudflare はリバースプロキシ型 CDNです。ユーザーは Cloudflare の DNS を設定するだけで、以下が自動で提供されます:
- グローバルなリバースプロキシ(エッジサーバー)
- DDoS 攻撃の緩和
- SSL/TLS 証明書の自動発行
- 静的コンテンツのキャッシュ
- Web Application Firewall(WAF)
[ユーザー] → [Cloudflare エッジ] → [オリジンサーバー]
↑
リバースプロキシとして動作
キャッシュ / WAF / DDoS 対策
ユーザーから見ると、Cloudflare のサーバーに接続しているように見えます。実際のオリジンサーバーの IP は隠されます。
実践メモ: Cloudflare は無料プランでも強力なリバースプロキシ機能を提供します。小規模サイトでも導入するだけで、パフォーマンスとセキュリティが大幅に向上します。
プロキシの透過性
| 種類 | 透過性 | クライアント設定 | サーバーから見える IP |
|---|---|---|---|
| 透過フォワードプロキシ | 透過的 | 不要(ネットワーク層で自動転送) | プロキシの IP |
| 非透過フォワードプロキシ | 非透過 | 必要(手動設定) | プロキシの IP |
| リバースプロキシ | 完全透過 | 不要(普通にアクセス) | プロキシの IP(X-Forwarded-For で元 IP 取得可) |
X-Forwarded-For ヘッダー
リバースプロキシを経由すると、バックエンドサーバーにはプロキシの IPが届きます。元のクライアント IP を知るために、X-Forwarded-For ヘッダーが使われます:
GET / HTTP/1.1
Host: example.com
X-Forwarded-For: 203.0.113.45
X-Real-IP: 203.0.113.45
# nginx でヘッダー設定
location / {
proxy_pass http://backend;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
ポイント: X-Forwarded-For は簡単に偽装できるため、信頼できるプロキシからのヘッダーのみを参照するよう注意してください。多段プロキシの場合は最初のプロキシが付与した値を使います。
まとめ
プロキシにはフォワードプロキシ(クライアント側の代理)とリバースプロキシ(サーバー側の代理)があり、それぞれ用途が異なります。
| 特徴 | フォワードプロキシ | リバースプロキシ |
|---|---|---|
| 代理する側 | クライアント | サーバー |
| 主な用途 | 匿名化、アクセス制御 | 負荷分散、SSL 終端、CDN |
| 典型例 | Squid、企業プロキシ | nginx、Cloudflare、HAProxy |
どちらも「中継」という意味では同じですが、誰が設定し、何を隠すかが根本的に異なります。現代の Web インフラでは、リバースプロキシが広く使われています。
参考リソース
- nginx - Reverse Proxy Documentation
- RFC 7230 - HTTP/1.1: Proxies
- Squid - Proxy Server
- Cloudflare - What is a reverse proxy?
- HAProxy Documentation