セキュリティ製品 - ネットワーク

リバースプロキシ りばーすぷろきし

プロキシロードバランサーWebサーバーSSL終端キャッシュWAF
リバースプロキシについて教えて

簡単に言うとこんな感じ!

会社の受付係みたいなもの!外からの来客(インターネットのリクエスト)をいったん受け付けて、「あなたはAのサーバーへ、あなたはBのサーバーへ」って振り分けてくれるんだ。中のサーバーを直接見せないから、セキュリティにも強くなるよ!


リバースプロキシとは

リバースプロキシとは、インターネットからのリクエストをクライアントの代わりに受け取り、内部のサーバーへ転送する「中継役」のサーバーのことです。クライアント側に置いて社内からのアクセスを代理する「フォワードプロキシ」とは逆に、サーバー側に置いてサーバーを守ることからリバース(逆)という名前がついています。

外部からは「1台のサーバーと通信している」ように見えますが、実際には裏側に複数のサーバーが動いていることが多く、リバースプロキシが透過的にやり取りを仲介します。大規模なWebサービスではほぼ必須の技術で、Nginx・Apache・HAProxy・Cloudflare などが代表的な実装として知られています。

ビジネス的な観点では、「本番環境のWebサーバーを外部に直接さらさない」「急なアクセス増加に対応しやすくする」「HTTPS化を一元管理する」といった実務上のメリットが大きく、システム選定・構成検討の際に必ず出てくる概念です。


リバースプロキシの主な機能

機能内容ビジネス上の効果
ロードバランシングリクエストを複数のサーバーに振り分ける負荷分散・冗長化・高可用性
SSL/TLS終端HTTPS通信の暗号化・復号を代理する証明書管理の一元化
キャッシュ静的コンテンツを一時保存して高速返却バックエンドの負荷軽減
セキュリティフィルタ不審なリクエストを遮断(WAF連携など)攻撃からサーバーを保護
圧縮レスポンスをgzip等で圧縮して転送通信量削減・表示高速化
URL書き換えリクエストパスを変換して振り分け柔軟なルーティング設計

覚え方:「受付・警備・案内係」

リバースプロキシの役割は「受付(リクエストを受け取る)」「警備(不正を弾く)」「案内(適切なサーバーへ転送)」の3つ。会社の受付窓口をイメージすると覚えやすいです。

フォワードプロキシとの違い

【フォワードプロキシ】クライアント側に設置
  社内PC → [プロキシ] → インターネット
  ※ 社内からの通信を代理・フィルタする

【リバースプロキシ】サーバー側に設置
  インターネット → [リバースプロキシ] → 社内サーバー
  ※ 外からの通信を受けて内部に振り分ける

歴史と背景

  • 1990年代前半:Webの黎明期。サーバーは1台が基本で、プロキシはキャッシュ目的のフォワード型が主流だった
  • 1990年代後半:Webサービスの急成長でアクセス集中が問題に。複数サーバーへの振り分け(ロードバランシング)の需要が生まれる
  • 2000年代:Apache の mod_proxy モジュール等でリバースプロキシが普及。ハードウェアアプライアンス製品(F5 BIG-IP等)も登場
  • 2004年Nginx(エンジンエックス)がリリース。高速・軽量な非同期処理でリバースプロキシのデファクトスタンダードへ
  • 2010年代:クラウド普及とともにマイクロサービス構成が増え、APIゲートウェイやサービスメッシュとしてリバースプロキシの役割が拡大
  • 2010年代後半〜現在:Cloudflare・AWS CloudFront などCDNがリバースプロキシ機能を包含。Let’s Encryptの普及でSSL終端の重要性がさらに増す

フォワードプロキシ・CDN・ロードバランサーとの比較

よく混同される近隣技術との違いを整理します。

リバースプロキシと関連技術の配置 クライアント (ユーザー) フォワード プロキシ 社内側 CDN (キャッシュ・配信) リバース プロキシ 連携 Webサーバー A Webサーバー B APIサーバー C インターネット 技術比較表 技術 設置場所 主な目的 代表製品 リバースプロキシ サーバー側 振り分け・保護・SSL終端 Nginx, HAProxy フォワードプロキシ クライアント側 社内→外への通信管理 Squid, Blue Coat CDN エッジ(世界各地) コンテンツ高速配信 Cloudflare, CloudFront ロードバランサー サーバー側 負荷分散に特化 F5 BIG-IP, AWS ALB

実際の構成例(Nginx)

# Nginx をリバースプロキシとして使う設定例
server {
    listen 443 ssl;
    server_name example.com;

    # SSL終端(外からのHTTPSをここで復号)
    ssl_certificate     /etc/ssl/certs/example.crt;
    ssl_certificate_key /etc/ssl/private/example.key;

    location /api/ {
        # /api/ へのリクエストはAPIサーバーへ転送
        proxy_pass http://backend-api:8080/;
    }

    location / {
        # それ以外はWebサーバー群へロードバランシング
        proxy_pass http://web_upstream;
    }
}

upstream web_upstream {
    server web-server-a:80;
    server web-server-b:80;
}

関連する規格・RFC

規格・RFC番号内容
RFC 7230HTTP/1.1 メッセージ構文・ルーティング(プロキシの基本動作を定義)
RFC 7231HTTP/1.1 セマンティクス(リクエスト・レスポンスの意味仕様)
RFC 7540HTTP/2(リバースプロキシでの HTTP/2 対応の基盤)
RFC 8441HTTP/2 上での WebSocket プロキシ対応
RFC 9110HTTP セマンティクス統合版(HTTP/1.1〜3 共通の意味仕様)

関連用語