← PC・IT用語集へ戻る

CDN

Content Delivery Network
世界中に配置されたキャッシュサーバーを使って、Webサイトの画像やデータをユーザーの近くから高速に配信する仕組み。
CDN (Content Delivery Network)

概要(サマリー)

CDN(Content Delivery Network)とは、世界各地に配置された「中継用サーバー」を連携させ、Webサイトの画像やテキストデータをユーザーの最も近くから高速に配信する仕組みである。
全国展開しているオンラインショップの「各地の配送センター」にたとえられる。東京にある本社倉庫(元のサーバー)から毎回日本中や世界中に荷物を届けるのは時間がかかるため、あらかじめ大阪や福岡の配送センター(中継サーバー)に商品のコピー(キャッシュデータ)を置いておき、注文が入ったら一番近いセンターから届けることで、配達時間(Webサイトの表示速度)を劇的に短縮する。

詳細解説

CDNとは何か

通常のWebサイトは、「オリジンサーバー」と呼ばれる元となる1台(または1つのグループ)のサーバーにすべてのファイルを置いて運営されている。しかし、アクセスするユーザーとオリジンサーバーの物理的な距離が遠い場合(例:アメリカのサーバーに日本からアクセスする)、データの往復に時間がかかり表示が遅くなる。また、同時に数万人がアクセスすると、オリジンサーバーの負荷が限界に達してサイトがダウンしてしまう。
これを解決するため、世界中に「キャッシュサーバー」と呼ばれる中継地点をばら撒き、データ配信を分担(肩代わり)させるシステムがCDNである。

CDNが機能する仕組み

  1. 最初のアクセス:
    あるユーザーがWebサイト上の画像にアクセスすると、CDNのキャッシュサーバーが代わりに要求を受け取る。この時、キャッシュサーバーの中にその画像がなければ、オリジンサーバーにデータを取りに行き、自分の中に一時保存(キャッシュ)してからユーザーに渡す。
  2. 2回目以降のアクセス:
    別のユーザーが同じ画像にアクセスしたときは、キャッシュサーバーはオリジンサーバーに聞きに行かず、自分の中に保存しておいた画像を直接手渡す。これにより、オリジンサーバーのトラフィック(転送量)負担をゼロにしつつ、ユーザーへ即座にデータを返すことができる。

CDNを導入するメリット

  • 表示速度の劇的な向上: ユーザーとネットワーク的・地理的に近い位置からデータが届くため、Webサイトの読み込みが非常に速くなる。
  • サーバー負荷の軽減とコスト削減: オリジンサーバーの代わりにCDNがほとんどの通信を処理するため、サーバーのレンタルスペックを抑えられ、転送量課金を安くできる。
  • 耐障害性の強化: 万が一アクセスが急増(スパイク)しても、CDNが壁となって耐えるため、サイトがダウンしにくくなる。また、DDoS攻撃などの不正なアクセスもCDN側でブロックできる。

代表的なCDNサービス

  • Cloudflare(クラウドフレア): 個人開発でも無料で手軽に導入できる、世界中で最も普及しているサービスの一つ。
  • Amazon CloudFront: AWSエコシステムと親和性の高いCDN。
  • Fastly(ファストリ): キャッシュの即時削除や高度なプログラム制御が得意で、多くの巨大メディアやECサイトで使われている。

AIコーディングとの関係

WebサーバーやアプリケーションでCDNを効率的に活用するためには、データが「どれくらいの期間キャッシュされてよいか」を伝える設定(HTTPヘッダーの制御)をプログラム側に記述する必要がある。

AIコーディングの際、以下のような設定コードを生成してもらうことができる。

  • キャッシュ制御ヘッダー(Cache-Control)の生成:
    「画像やCSSなどの静的ファイルには1年間CDNキャッシュを効かせ、HTMLJSONデータはキャッシュさせないようにするNginxの設定ファイル(またはNode.jsのExpressのコード)を書いて」とAIに依頼する。これにより、トラフィックを極限まで抑えながら、リアルタイムな情報更新も両立できる設定が手に入る。

NginxでのCDN向けキャッシュ制御設定の例(AI生成):

# 画像やCSS、JSなどの静的ファイルを強固にCDNへキャッシュさせる設定
location ~* \.(jpg|jpeg|png|gif|css|js|ico|webp)$ {
    # 365日間、ブラウザとCDNにキャッシュを許可する(public)
    add_header Cache-Control "public, max-age=31536000, immutable";

    # オリジンサーバーにアクセスさせないようにログ出力を省略
    access_log off;
}

よくある勘違い

CDNを導入したら、元のサーバー(オリジン)は不要になる?

不要にはならない。
CDNにあるデータはあくまでも「一時的なコピー(キャッシュ)」である。一定時間が経つと古いコピーは破棄されるため、再度オリジンサーバーから最新のデータを取得し直す必要がある。また、ログイン処理やデータベースの更新など、ユーザーごとに異なる「動的な処理」はCDNでは行えず、オリジンサーバー側で処理しなければならない。

CDNを使うと、Webサイトの修正が即座に反映されなくなる?

その通りである。
CSSファイルを修正してサーバーにアップロードしても、CDNに古いキャッシュデータが残っている間は、ユーザーの画面には以前のデザインが表示され続けてしまう。
これを防ぐために、CDNの管理画面からキャッシュを強制的に消去(パージ / Purge)したり、CSSファイルのURLの末尾にバージョン番号(例:style.css?v=2)を付けてCDNに「新しいファイルだ」と認識させたりする工夫(キャッシュバスター)が必要となる。

CDNを使えばサイトへのサイバー攻撃は完全に防げる?

完全には防げない。
CDNはDDoS攻撃(一斉アクセス攻撃)のトラフィックを吸収・分散する効果があり、セキュリティ強化に役立つのは事実である。しかし、CDN自体が攻撃の標的になることもあるし、SQLインジェクションXSSなど「アプリケーション層」の脆弱性はCDNでは防げない。CDNはあくまで「配信の効率化と帯域攻撃への耐性向上」を目的とするものであり、セキュリティのすべてをカバーするわけではないため、アプリ側のセキュリティ対策も並行して行う必要がある。

まとめ

  • CDNは、世界中のキャッシュサーバーからデータを手分けしてユーザーに高速配信する仕組み。
  • ユーザーに近いサーバーが応答するため表示が速くなり、元サーバーの負荷や転送量を削減できる。
  • 静的ファイル(画像・動画等)の配信に絶大な効果を発揮する。
  • サイト更新時に古いデータが表示され続けることがあるため、キャッシュ削除(パージ)やURLでの制御が必要。

情報ソース

より詳しくAIに聞いてみよう

  • HTTPヘッダーの「Cache-Control」の「s-maxage」と「max-age」の違いについて、CDNの文脈を含めて詳しく教えてください。
  • CDNのキャッシュを強制的にクリアする「キャッシュクリア(パージ)」のAPIを、GitHub Actionsやローカルスクリプトから自動実行するコードを教えてください。
  • CDNで使われる「エッジコンピューティング(Cloudflare WorkersやCloudFront Functionsなど)」とは何ですか?何に使うものですか?
  • 動的なコンテンツ(HTMLやAPIレスポンス)もCDNに安全にキャッシュさせるための設計手法(Stale-While-Revalidateなど)を解説してください。
  • 自分のWebサイトにCloudflareを導入して、ドメインのネームサーバー(DNS)を切り替える大まかな手順を教えてください。