一般的なCDNの問題とその解決方法

CDNを使用しているにもかかわらず、ウェブサイトが遅い場合は、ここで紹介する一般的なCDNの問題を確認してください。

学習目的

この記事を読み終えると、以下のことができるようになります。

  • CDNパフォーマンスの低下のトラブルシューティング
  • CDNキャッシュから古いコンテンツが提供される問題を解決する
  • 他の一般的なキャッシュの問題を特定する

記事のリンクをコピーする

一般的なCDNの問題とその解決方法

コンテンツ配信ネットワーク(CDN)は、エンドユーザーへの配信を高速化するためにWebコンテンツをキャッシュまたは保存するサーバーの分散グループです。CDNは、動画ストリーミング動的コンテンツSSL暗号化と認証を支援するなど、キャッシング以外にもさまざまな方法で、コンテンツ配信の高速化とユーザー体験の向上に役立ちます。

どのWebサイトでも、CDNの恩恵を受けることができます。CDNは、エンドユーザーと配信元サーバーの間に位置し、ユーザーのリクエストに対してまずキャッシュにあるコンテンツで応答し、その後必要に応じてリクエストを配信元サーバーに渡します。これにより、ユーザーが体感するWebサイトの読み込み速度が向上します。これは、毎週の食料品を全国の農場や工場を回って集めるより、スーパーで購入する方がずっと早いことに例えることができます。

CDNのトラブルシューティング:CDNの問題を解決する方法

ほとんどの場合、CDNに登録するだけで、すぐにWebサイトの高速化、Webサイト運営者に対する帯域幅コストの節約サイトの信頼性の向上、特定のサイバー攻撃(DDoS攻撃など)への耐性の向上を実現することができます。しかし、時にはCDNの問題が原因で、Webプロパティがこれらのメリットを享受できないことがあります。ここでは、CDNの潜在的な問題、原因となる要因、およびそれらに対処するための推奨事項を紹介します。

CDNのパフォーマンス低下の問題

いくつかの問題により、CDNを使用してもWebサイトのパフォーマンス向上が見られない、または遅くなることがあります。

グローバルリーチの欠如:使用するCDNによって、地域ごとにパフォーマンスが一貫しないことがあります。CDNを選定する際は、必ずネットワーク全体でコンテンツをCDNでキャッシュし、エンドユーザーに近いグローバルな拠点を持つCDNを使用するようにしてください。

配信元サーバーの問題:CDNが配信元サーバーからコンテンツを取得できない場合、コンテンツをキャッシュしたり提供することができません。これは、配信元サーバーがダウンした場合や、配信元サーバーとCDN間のトラフィックがネットワークのボトルネックに巻き込まれた場合に発生することがあります。

配信元サーバーから動的コンテンツの読み込みに失敗する:動的コンテンツはキャッシュできないため、配信元サーバーがリクエストに正しく応答しない場合、ページの読み込みが遅くなったり、失敗する可能性がありますが、この場合はCDNキャッシングの動作は関係ありません。一部のCDN(Cloudflareなど)は、動的コンテンツの配信を高速化する追加サービスが組み込まれています。

最適化されていないファイル:CDNの制限により、非常に大きなコンテンツや特定の種類のファイルはキャッシュされない可能性があります。高速配信で優れたユーザー体験を提供するために、すべてのコンテンツが最適化されていることを確認してください。多くのCDNには、コンテンツを最適化、「軽量化(ファイルサイズの縮小)」、またはコンテンツを圧縮する機能が付属しています。

レンダリングを妨げるリソース:これらはページの他の部分の読み込みを妨げる要素のことで、例としてカスケードスタイルシート(CSS)ファイルが挙げられます。ページの他の部分が適切にキャッシュされていてもCSSファイルがキャッシュされていない場合、他のページ要素をキャッシュから取得するよりも前にWebサーバーからCSSファイルを取得する必要があり、これが原因でページの読み込み時間が遅くなることがあります。レンダリングを妨げるリソースもキャッシュされるようにするか、不要なリソースを排除する、または最後に読み込まれるようにページを再設計してください。

キャッシュされていないサードパーティスクリプト:多くのWebサイトは自身のものではない他のソースからのスクリプトを組み込んでいますが、それらのソースは同じCDNを使用していない可能性があります。これらのサードパーティスクリプトの配信元サーバーが地理的に遠く離れている場合、配信に最適化されていない場合、または高い負荷がかかっている場合、読み込みに時間がかかることがあります。スクリプトがレンダリングを妨げるリソースである場合、ページ全体の表示が遅くなる可能性があります。Chromeのデベロッパーツールを使用することで、遅延を引き起こしている要素、その配信元を評価することができます。ページの速度を一貫して低下させるスクリプトの置き換えや、何千ものJavaScriptとCSSライブラリを提供する無料のコンテンツ配信ネットワークであるCDNJS経由でホストされているスクリプトを使用することを検討してください。

CDNのキャッシュヒット率が低い:キャッシングにおいて「キャッシュミス」とは、要求されたコンテンツがCDN上に見つからず、配信元サーバーから取得する必要があることを意味します。「キャッシュヒット」は、その逆で、要求されたコンテンツがキャッシュ上で見つかり、キャッシュから提供されたことを意味します。キャッシュヒット率は、特定のWebサイト上でのヒットとミスの関係を測定した結果です。キャッシュヒット率が低い場合、Webページの大部分がキャッシュから提供されておらず、多くを配信元サーバーから取得する必要があることを意味します。ホスティングプロバイダーによっては、キャッシュミスごとにWebサイトにエグレス料金が発生し、その結果、Webサイトの運用コストが高くなります。

低いキャッシュヒット率が発生する理由はいくつかあります:

  • キャッシュルール:キャッシュルールには、キャッシュする対象とその期間を指定できます。キャッシュルールが正しく設定されていない場合、コンテンツが適切にキャッシュされません。CDNプロバイダーは、特定のURLで発生しているCDNキャッシングのトラブルシューティングを行う方法を提供している必要があります。(例:Cloudflare Traceを参照)。
  • キャッシュレベル:URLの種類に応じて、アセットがキャッシュされる方法が異なる場合があります。CDNによっては、URLに付加されたクエリ文字列を無視してベースURLごとに同じコンテンツをキャッシュするものもあれば、クエリ文字列ごとに異なるコンテンツをキャッシュするものもあります(クエリ文字列は「example.com/image.jpg?with=query」のように、URLの?記号に続く文字列を指します)。URLに付加されたクエリ文字列によって配信される内容が異なる場合があるため、これは意図しない動作となることがあります。この問題を解決するには、キャッシュレベルの設定を調整してください。
  • Cache-Controlヘッダー:Cache-controlヘッダーは、配信元サーバーからのHTTP応答に付加されます。これらのヘッダーは、ブラウザのキャッシュルールや、CDNのような中継局のキャッシュルールを定義するものです。Cache-Controlヘッダーは、プロバイダーによってはCDNで既に設定しているキャッシュルールと競合する可能性があるため、オーバーライド関係になっている場合は、両者を比較して、両方のキャッシュが正しく設定されていることを確認してください。

ですが、Webサイトのパフォーマンスにおいて重要な指標は、キャッシュヒット率だけではありません。Webパフォーマンスを全体的に考える場合、コアウェブバイタルや、ユーザーエクスペリエンス、SEO、AI最適化に影響を与えるその他のメトリクスを含める必要があります。

ウェブサイトに古いコンテンツが表示される

コンテンツが速く読み込まれても、最近の更新や変更を反映していない誤ったコンテンツが表示される場合、キャッシュされたコンテンツの有効期限(TTL)が長すぎる可能性があります。有効期限(TTL)には、CDN(またはブラウザ)が保存されたコピーを次回更新するまでの、コンテンツをキャッシュしておく時間(秒)を指定します。適切に更新されていないコンテンツの有効期限(TTL)を短くしてください。または、CDNが配信元サーバーからコンテンツを再取得するようにキャッシュのクリアをお試しください。

更新頻度の高いコンテンツには、特別なキャッシュルールが必要な場合があります。場合によっては、キャッシュを無効にする必要があります。Cloudflareには、Webページのコンテンツをキャッシュから即座に削除できるパージ機能があります。

DNSの設定

もしドメインとそのすべてのサブドメインがCDNを指していない場合、それらのドメインに関連するコンテンツはCDNでキャッシュされないため、Webサイトはパフォーマンス上の利点を得られません。

サブドメインが正しく設定されていることを確認してください。サブドメイン(CNAMEレコードを介して設定)は、個別に設定する必要があります。プライマリドメインがCDNの背後にあっても、サブドメインがCDNの背後にない場合、そのコンテンツはCDNでキャッシュされません。

CDNにおけるSSLエラー

CDNは、多くの場合、WebサイトにSSL証明書を提供します。SSL証明書は、ユーザーのWebサイトへの接続を認証し、ユーザーが入力した機密データを暗号化し、セキュリティ警告を防ぐ役割があります。しかし、Webページ上の一部のコンテンツがSSL接続で配信され、残りがそうではない「混合」コンテンツに遭遇することがあります。この場合、ブラウザがページのセキュリティに関する警告を表示したり、ページの読み込みに失敗したり、ページの読み込みが遅くなる可能性があります(ブラウザがTLSハンドシェイクの開始を試みたり、失敗したりするため)。

これらのエラーは、Webページに外部ソースからのコンテンツや、SSL証明書に記載されていないサブドメインからのコンテンツが含まれている場合に発生することがあります。この混在コンテンツによるエラーは、Chromeのデベロッパーコンソールを使用してコンテンツの読み込み元とそのURLを確認することでトラブルシューティングを行うことができます。

他のSSLエラーは、そのドメインの証明書に関連している可能性があります。よくあるSSLの問題についてはこちらで確認してください。

Cloudflare CDNのサポートが必要な場合、Cloudflareコミュニティに参加することで、Cloudflareの有識者からの無料のサポートやインサイトを活用できます。

 

よくある質問

CDNとは何か?

CDN(コンテンツ配信ネットワーク)は、Webコンテンツのコピーを保存し、ユーザーに迅速に配信するための分散サーバー群です。CDNには、キャッシング以外にも、コンテンツ配信を高速化してユーザー体験を向上させるサービスとして、ストリーミング、動的コンテンツ、DDoS軽減、TLSの使用のサポートなどが備わっています。

CDNがWebサイトのパフォーマンスを向上させる仕組みは?

CDNは、エンドユーザーと配信元サーバーの間に位置し、Webサイトのコンテンツ配信を加速してユーザーのWebサイトの読み込みを高速化します。CDNは、ユーザーと要求されたコンテンツの距離を縮め、ファイルを最適化して、より迅速に配信できるようにすることでこれを実現しています。

CDNが遅くなる理由にはどのようなものが考えられますか?

CDNのパフォーマンスが低下する原因として考えられるものには、「グローバルリーチの欠如」、「配信元サーバーの問題」、「動的コンテンツが正しく読み込まれない」、「最適化されていないファイル」、「レンダリングを妨げるリソース」、「キャッシュされていないサードパーティスクリプト」、「キャッシュヒット率が低い」などが挙げられます。

「キャッシュヒット率が低い」の意味と、それが重要な理由は?

キャッシュヒット率が低い場合、Webページの大部分がキャッシュから提供されておらず、多くを配信元サーバーから取得する必要があることを意味します。問題のWebページのアーキテクチャによっては、ページの読み込み時間が遅くなり、エグレス料金による運用コストが増加する可能性があります。

キャッシュヒット率が低い原因は?

キャッシュヒット率が低い原因には、キャッシュルールの設定が正しくない、URLの種類(クエリ文字列など)ごとのアセットのキャッシングレベルの違い、または配信元サーバーからのCache-ControlヘッダーとCDNキャッシングルールの間に競合があることなどが考えられます。

CDNを使用している場合に、古いコンテンツがWebサイトに表示される理由は?

キャッシュされたコンテンツの有効期限(TTL)設定が長すぎると、古いコンテンツが表示されることがあります。有効期限(TTL)には、CDN(またはブラウザ)が保存されたコピーを次回更新するまでの、コンテンツをキャッシュしておく時間(秒)を指定します。有効期限(TTL)を短くするか、キャッシュをクリアすることでこれを解決できます。