| この記事の要点 |
|
負荷分散・プロキシ・CDN とは
大規模な Web サービスでは、ブラウザがアプリケーションサーバーと直接通信することはほとんどありません。間にプロキシ・ロードバランサ・CDN が入り、負荷分散、キャッシュ、SSL/TLS の終端、攻撃の遮断といった役割を分担しています。このカテゴリでは、それぞれの仕組みと代表的なソフトウェアの設定方法を解説します。
典型的な Web サービスでは、リクエストは次のような順に流れます。
ブラウザ → (社内ならフォワードプロキシ) → インターネット
→ CDN エッジ → ロードバランサ / リバースプロキシ → アプリサーバー群
それぞれの違い
| 種類 | 誰の代理か | 主な用途 | 代表的な実装 |
|---|---|---|---|
| フォワードプロキシ | クライアント | 社内から外部へのアクセス制御・ログ・キャッシュ | Squid |
| リバースプロキシ | サーバー | SSL 終端、バックエンドの隠蔽、キャッシュ、WAF | nginx、Apache |
| ロードバランサ | サーバー群 | 複数サーバーへの振り分け、ヘルスチェック | HAProxy、nginx、クラウド LB |
| CDN | サーバー(地理的に分散) | 静的ファイルのエッジ配信、DDoS 緩和 | Cloudflare、CloudFront |
リバースプロキシとロードバランサは機能が重なっており、nginx や HAProxy は両方の役割を 1 台でこなせます。「1 台のサーバーの前に置く」ならリバースプロキシ、「複数台に振り分ける」ならロードバランサと呼ぶ、くらいの理解で十分です。
読む順番
- フォワードプロキシ — 「代理で通信する」というプロキシの基本概念をつかむ
- リバースプロキシ — 向きが逆になると何がうれしいのか(SSL 終端・隠蔽)を理解する
- ロードバランサ — L4 と L7 の違い、ラウンドロビンなどの分散アルゴリズム、ヘルスチェック
- nginx リバースプロキシ設定 —
proxy_passとupstreamで実際に設定する - HAProxy — frontend / backend の考え方と設定例
- CDN — エッジキャッシュ、TTL、キャッシュ削除(パージ)の考え方
手を動かして試したい場合は、1・2 を読んだあと 4 の nginx 設定に進むのが近道です。
目的別の選び方
- 社員のインターネット利用を制御・記録したい → フォワードプロキシ
- アプリの前で HTTPS を受けたい、アプリを直接公開したくない → リバースプロキシ(nginx が手軽)
- サーバーを複数台にして負荷と障害に備えたい → ロードバランサ(自前なら HAProxy / nginx、クラウドならマネージド LB)
- 画像や JS・CSS の配信を速くしたい、海外利用者がいる → CDN
- サーバー更新後に変更が反映されない → CDN やリバースプロキシのキャッシュを疑う
関連
- Nginx 完全ガイド(リバースプロキシ・HTTP/2/3・Apache 比較・PHP-FPM 連携)
- クラウドロードバランサとは|ALB(L7)/NLB(L4)/CLB・ターゲットグループ
- Cloudflareとは|CDN・DNS・DDoS対策など主要機能と仕組み
- 本番サーバーでコード変更が反映されない(キャッシュ・OPcache・LB・CDN の切り分け)
- ルーター
同階層のページ
- ネットワークの範囲と種類
- ネットワーク機器
- OSI参照モデル
- プロトコル
- アドレッシング・識別子
- ルーティング・スイッチング
- 負荷分散・プロキシ・CDN
- ネットワークセキュリティ
- クラウドネットワーク
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38