CDNとリバースプロキシの仕組みを図解で説明 〜キャッシュでWebサイトが速くなる流れ〜

海外にあるWebサイトでも、すぐに表示されることが多いのはなぜだと思いますか?

その裏では、「CDN」や「リバースプロキシ」という仕組みが働いていることがあります。

どちらも、サーバの代わりに利用者に応える仕組みです。

CDNとリバースプロキシの仕組みについて、図を使って説明していきます。

フォワードプロキシとリバースプロキシの比較図。フォワードプロキシは社内の出口で利用者の代理をし、リバースプロキシはWebサーバの手前でサーバの代理をする

プロキシとは?

プロキシは、「代理」という意味です。

通信の間に入って、誰かの代わりに通信をするサーバ をプロキシサーバと呼びます。

プロキシには、誰の代わりをするかで2種類あります。

フォワードプロキシ

フォワードプロキシは、利用者の代わりに、Webサイトへアクセスする プロキシです。

会社のネットワークの出口などに置かれます。

社員がWebサイトを見る時は、フォワードプロキシを通ってアクセスします。

見てはいけないサイトへのアクセスを止めたり、アクセスの記録を残したりするのに使います。

単に「プロキシ」と言う時は、こちらを指すことが多いです。

リバースプロキシ

リバースプロキシは、Webサーバの代わりに、利用者からの要求を受け取る プロキシです。

Webサーバの手前に置かれます。

利用者は、リバースプロキシを本物のWebサーバだと思ってアクセスします。

リバースプロキシは、受け取った要求を裏にあるWebサーバに渡し、返ってきた結果を利用者に返します。

リバースプロキシの役割

リバースプロキシを置くと、次のようなことができます。

リバースプロキシの役割の図。キャッシュ、負荷分散、暗号化の肩代わり、本物のサーバを隠す
  • キャッシュ: 一度返したページや画像を覚えておき、同じ要求には裏のサーバに聞かずに返す
  • 負荷分散: 要求を複数のWebサーバに振り分ける
  • 暗号化の処理の肩代わり: HTTPSの暗号化と復号をリバースプロキシで行い、裏のサーバの負担を減らす
  • 裏のサーバを隠す: 利用者からは、本物のWebサーバのIPアドレスや台数が見えない

リバースプロキシのソフトウェアとしては、nginx(エンジンエックス)がよく使われます。

CDNとは?

CDNは、Content Delivery Network(コンテンツ配信ネットワーク)の略です。

世界中に置いたサーバに、Webサイトの画像などのコピーを置いておき、利用者に近いサーバから届ける仕組み です。

CDNの図。海外のオリジンサーバのコピーを各地のエッジサーバに置き、日本の利用者は東京のエッジサーバから受け取る

もとのデータを持っているサーバを「オリジンサーバ」と呼びます。

利用者の近くに置かれたコピー用のサーバを「エッジサーバ」と呼びます。

日本の利用者は、日本にあるエッジサーバからデータを受け取ります。

海外のオリジンサーバまで毎回取りに行かないので、表示が速くなります。

CDNは、世界中に置いたリバースプロキシのキャッシュ、と考えるとイメージしやすいです。

代表的なサービスには、Akamai、Cloudflare、Amazon CloudFrontがあります。

キャッシュの流れ

エッジサーバに目的のデータがあるかどうかで、動きが変わります。

キャッシュヒットとキャッシュミスの図。ヒットの時はエッジサーバがそのまま返し、ミスの時はオリジンサーバから取ってきて保存する
  • キャッシュヒット: エッジサーバにデータがある。そのまま利用者に返すので速い
  • キャッシュミス: エッジサーバにデータがない。オリジンサーバから取ってきて利用者に返し、エッジサーバにも保存しておく

一度キャッシュミスになったデータも、次からはキャッシュヒットになります。

キャッシュをどのくらいの時間持っておくかは、オリジンサーバが返す情報(Cache-Controlなど)や、CDNの設定で決めます。

CDNを使う時の注意点

CDNは便利ですが、次の点に注意が必要です。

  • 更新がすぐに反映されないことがある: 古いキャッシュが残っている間は、古い内容が表示される。急ぐ時は、CDNのキャッシュを消す操作をする
  • 利用者ごとに違うページは、キャッシュしないように設定する: マイページのように個人の情報が入ったページをキャッシュすると、別の人に見えてしまう。CDNが自動で見分けてくれるとは限らないので、Cache-Controlの指定(privateやno-store)やCDNの設定で、キャッシュの対象から外す

キャッシュしてよいのは、画像やCSSのように、誰が見ても同じ内容のデータです。

CDNとリバースプロキシの違い

リバースプロキシとCDNの比較表。置く場所、主な目的、用意する人で比べている

リバースプロキシは、Webサーバと同じデータセンターなど、Webサーバのすぐ手前に置くことが多いです。

CDNは、事業者が世界中に用意した拠点を、サービスとして借りて使います。

まとめ

今回はCDNとリバースプロキシの仕組みについて説明しました。

リバースプロキシは、Webサーバの代わりに利用者からの要求を受け取るサーバで、キャッシュや負荷分散などを行います。

CDNは、世界中のエッジサーバにデータのコピーを置き、利用者に近い場所から届けて表示を速くする仕組みです。

「フォワードプロキシは利用者の代理、リバースプロキシはサーバの代理」と覚えておきましょう。

利用者が近いエッジサーバにつながる時には、DNSの仕組みが使われることがあります。DNSについては、DNSの仕組みを図解で説明の記事で説明しています。

HTTPSの暗号化については、SSL/TLS通信の仕組みを図解で説明の記事で説明しています。

要求を複数のWebサーバに振り分ける負荷分散については、ロードバランサーの仕組みを図解で説明の記事で説明しています。