このトピックでは、CDN を使用して OSS リソースへのアクセスを高速化する際に発生する一般的な問題とその解決方法について説明します。高速化の検証、HTTPS デプロイメント、プライベートバケットのオリジンフェッチ、キャッシュポリシー、画像処理およびビデオスナップショット、ホットリンク保護の構成などのシナリオをカバーしています。
OSS の CDN 高速化の検証
ステップ 1:CNAME レコードの確認
たとえば、Alibaba Cloud DNS を使用している場合は、DNS 管理コンソールにログインし、権威 DNS を選択して、ドメイン名の横にある DNS 設定 をクリックします。
高速化ドメイン名(例:
oss.example.com)に対して CNAME レコード(例:oss.example.com.w.kunlunaq.com)が追加されており、そのステータスが 有効 になっていることを確認します。
ステップ 2:nslookup によるドメイン検証
コマンドプロンプト(Windows)またはターミナル(macOS/Linux)を開きます。
nslookup -type=CNAME <accelerated_domain_name>を実行します。返された CNAME 値が CDN コンソールで高速化ドメイン名に対して提供されているものと一致する場合、CDN 高速化はアクティブです。
CNAME レコードをまだ設定していない場合は、「CNAME レコードの設定」をご参照ください。
CDN によるプライベート OSS バケットの高速化
高速化ドメイン名のオリジンがプライベートバケットの場合、高速化ドメイン名に対して「プライベート OSS バケットへのアクセス」を有効にする必要があります。これにより、CDN はプライベートバケット内のリソースへのアクセスを高速化できます。
この機能を有効にすると、高速化ドメイン名を使用してプライベートバケット内のすべてのリソースにアクセスできるようになり、元の URL ベースの非公開認証方式は適用されなくなります。リソースを不正アクセスから保護するために、CDN のホットリンク保護および URL 認証機能を使用できます。詳細については、「Referer ホワイトリストまたはブラックリストの設定」および「URL 認証の設定」をご参照ください。
CDN 高速化のための HTTPS 証明書のデプロイメント
CDN を使用して OSS へのアクセスを高速化する場合、HTTPS 証明書は CDN 上でのみデプロイすれば十分です。詳細については、「HTTPS 証明書の設定」をご参照ください。
証明書が Alibaba Cloud Digital Certificate Management Service(旧称:SSL 証明書サービス)で管理されている場合は、Digital Certificate Management Service コンソールからもデプロイできます。詳細については、「SSL 証明書を Alibaba Cloud サービスにデプロイする」をご参照ください。
403 Forbidden エラー
トラブルシューティング手順:
ページ上のエラーメッセージを確認します。
You don't have permission to access the URL on this serverやYou are forbidden to list bucketsなどのメッセージが表示され、さらにdenied by IP ACL = not in whitelistのような詳細が付随している場合、この情報を使用してブロッキングポリシーを迅速に特定できます。唯一のメッセージが
You don't have permission to access the URL on this serverであり、他の詳細がない場合は、CDN の URL 認証およびリモート認証の設定を確認してください。
ドメイン名の画像が権限拒否エラーにより読み込まれない場合:
プライベートバケットのオリジンフェッチスイッチを確認します:CDN コンソールにログインし、対象ドメイン名の ドメイン管理 ページに移動し、Alibaba Cloud OSS プライベートバケットのオリジンフェッチが有効になっていることを確認します。有効になっていない場合、CDN はプライベート OSS リソースにアクセスする権限を持たず、403 エラーが発生します。
Referer ホワイトリスト/ブラックリストの構成を確認します:ドメインの設定に移動し、リクエストの Referer がホワイトリストに含まれていることを確認します。Referer ルールによってリクエストがブロックされている場合は、対象の Referer をホワイトリストに追加してください。
OSS に静的 Web サイトホスティングを設定しており、インデックスファイル(例:index.html)またはバケット自体が非公開の場合、「プライベート OSS バケットへのアクセス」機能を有効にする必要があります。その後、CDN で URL 書き換えルールを設定し、アクセス URL を構成済みのインデックスファイル(例:index.html)に書き換えてください。CDN エッジノードは 302 リダイレクトを発行し、クライアントに index.html のコンテンツをリクエストさせます。このプロセスにより、静的 Web サイトホスティングが可能になります。詳細な構成手順については、「アクセス URL の書き換え」をご参照ください。ルールを設定するには、書き換え対象パス を ^/$、書き換え先パス を /index.html、アクション を リダイレクト に設定します。
CDN 有効化後の低速アクセス
高速化ドメイン名を使用してリソースに初めてアクセスする際、リクエストは CDN エッジノードに送信されます。この時点でリソースはノード上にキャッシュされていないため、CDN エッジノードは OSS からオリジンフェッチを実行し、リソースをキャッシュした後にクライアントに返します。同じリソースに対する後続のリクエストは、CDN エッジノードから直接提供されます。そのため、初回アクセスは CDN 高速化なしの場合よりも遅くなる可能性があります。
CDN のプリヒート機能を使用して、事前に OSS リソースを CDN エッジノードにキャッシュできます。これにより、クライアントの初回リクエストがオリジンフェッチなしで CDN エッジノードから直接提供されるようになります。手順については、「リソースのリフレッシュとプリヒート」をご参照ください。
オリジンフェッチを削減するためのキャッシュポリシー
キャッシュの有効期限を設定しない、または設定時間が短すぎると、CDN が頻繁にオリジンフェッチを実行する可能性があります。これにより、オリジンから OSS へのトラフィックと関連コストが増加し、アクセス速度が低下する可能性があります。ビジネスニーズに基づいてキャッシュの有効期限を設定できます。
画像やアプリケーションインストーラなど、更新頻度が低い静的ファイルの場合は、存続時間(TTL)を 1 ヶ月以上に設定します。
JS や CSS ファイルなど、頻繁に更新される静的ファイルの場合は、更新頻度に基づいて TTL を設定します。
詳細については、「キャッシュ有効期限ルールの設定」をご参照ください。
ユーザーが最新リソースにアクセスできることの保証
OSS 内のファイルを変更した後、CDN ノードが自動的にキャッシュをリフレッシュし、クライアントが更新されたコンテンツを受け取るようにするには、OSS コンソールで CDN キャッシュ自動リフレッシュ機能を有効にできます。具体的な手順については、「CDN キャッシュ自動リフレッシュの設定」の「CDN キャッシュ自動リフレッシュの有効化」セクションをご参照ください。
この機能は、リフレッシュタスクが確実に成功する、またはタイムリーに送信されることを保証するものではありません。リアルタイムでの更新が必要な場合、またはリフレッシュステータスを追跡する必要がある場合は、CDN リフレッシュ機能を使用してください。詳細については、「リソースのリフレッシュとプリヒート」をご参照ください。
OSS コンソールで CDN 自動リフレッシュを有効にできない
OSS コンソールで CDN キャッシュ自動リフレッシュを有効にできず、「このドメイン名を最初に OSS にバインドしてください」というメッセージが表示されます。
ソリューション:カスタムドメイン名のバインド 列で、該当ドメインの横にある 未バインド をクリックし、画面の指示に従ってドメインをバインドします。すでにドメインを CDN にバインドしており、DNS が CDN CNAME に解決されている場合は、OSS ドメインをバインドした後に DNS レコードを変更しないでください。そうしないと、CDN 高速化サービスが機能しなくなります。
OSS 画像処理パラメーターが無効になる
CDN を使用して OSS を高速化する場合、リクエストはまず CDN エッジノードに到達します。「パラメーターの無視」機能が CDN で有効になっている場合、ノードはリクエスト URL の ? 以降のすべてのパラメーターを削除します。リソースがすでにキャッシュされている場合、CDN はオリジンフェッチを実行せず、OSS 画像処理は適用されません。詳細については、「パラメーターの無視」をご参照ください。
「パラメーターの無視」機能を無効にしてください。リクエストにパラメーターが含まれている場合、OSS へのオリジンフェッチがトリガーされ、画像処理が期待どおりに機能します。
「パラメーターの無視」を無効にした後、パラメーター付きのすべてのリクエストがオリジンフェッチをトリガーするため、キャッシュヒット率が低下する可能性があります。代わりに、CDN が提供する 画像処理 機能を使用して、CDN エッジノード上で画像処理を実行することもできます。
ビデオスナップショットの特殊な構成
OSS ビデオスナップショット機能(x-oss-process=video/snapshot,t_1000 などのパラメーターを使用)を使用する場合、CDN ドメインで「パラメーターの無視」が有効になっていると、元のビデオ URL とスナップショットパラメーター付きの URL が同じリソースとしてキャッシュされます。これにより、ビデオにアクセスした際にスナップショット画像が返される、またはスナップショットをリクエストした際に元のビデオが返されることがあります。
ソリューション:CDN コンソールで「URL パラメーターの無視」機能を使用し、指定されたパラメーターを保持するモードに切り替えます。x-oss-process を保持するパラメーターのリストに追加します。これにより、スナップショットパラメーター付きの URL が個別にキャッシュされ、元のビデオキャッシュとの競合を回避できます。構成を変更した後は、ビデオファイルを含むディレクトリをリフレッシュする必要があります。
CDN キャッシュからファイルまたはディレクトリを除外する
CDN を使用して OSS を高速化する際、特定のファイルまたはディレクトリについて CDN キャッシュをバイパスし、すべてのリクエストで OSS から最新バージョンを直接フェッチする必要がある場合があります。管理慣行に応じて、次の 2 つの方法で実現できます。
CDN 側の構成(推奨):CDN コンソールでキャッシュルールを管理します。この方法は、運用チームが集中管理を行うシナリオに適しています。キャッシュ設定 に移動し、キャッシュ期間を 0 に設定します。ルールが有効になると、これらのパスに対するリクエストを CDN が受信した際に、OSS からオリジンフェッチを実行し、レスポンスをキャッシュしません。
OSS 側での構成:OSS ファイルのレスポンスヘッダーを設定します。これは、ストレージとコンテンツ管理が分離されているシナリオに適しています。CDN コンソールで、キャッシュポリシーがオリジンヘッダーを優先するように設定されていることを確認してください。そうでない場合、カスタム CDN ルールがオリジンヘッダーをオーバーライドする可能性があります。その後、OSS コンソールに移動し、ファイル管理 > ファイル に進み、対象ファイルを選択して、必要に応じて Cache-Control 値を設定します。
Cache-control 値 | ユースケース | 説明 |
| 推奨:HTML ファイル、設定ファイル、バージョンメタデータなど、毎回最新バージョンをフェッチする必要があるコンテンツ向け。 | CDN はコンテンツをキャッシュしません。ブラウザは ETag を使用してオリジンと再検証を行います。 |
| 高秘密度シナリオ:ユーザーのプライバシーデータ、トークン、金融情報など、いかなる時点でも保存すべきでないコンテンツ向け。 | CDN およびブラウザのいずれもコンテンツをキャッシュしません。毎回完全なリクエストが行われます。 |
| パーソナライズされたコンテンツ:複数ユーザーのキャッシュで共有できないユーザー固有のコンテンツを含むページ向け。 | CDN はコンテンツをキャッシュしませんが、ブラウザはキャッシュできます。 |
どちらのソリューションも新規リクエストにのみ適用されます。ファイルがすでにキャッシュされている場合、これらの新しい設定はエッジノード上のキャッシュを自動的にクリアしないため、ユーザーは古いバージョンを引き続き表示する可能性があります。CDN キャッシュをリフレッシュする必要があります。対象の URL またはディレクトリを入力してリフレッシュしてください。その後のリクエストは新しいルールに従い、OSS から最新のコンテンツをフェッチします。
キャッシュヒット率が低く、頻繁にオリジンフェッチが発生する
トラブルシューティング
同一リソースに対して複数回 curl -I を実行し、Age および X-Cache レスポンスヘッダーを確認します。Age: 0 または X-Cache: MISS ヘッダーはオリジンフェッチを示します。
ソリューション
キャッシュルールの TTL が短すぎる、または「キャッシュしない」に設定されています。キャッシュルールを調整して、キャッシュ有効期限を延長してください。
「パラメーターの無視」機能が有効になっていますが、URL にバージョン管理や画像処理に必要なパラメーター(例:
?v=1.1やx-oss-process)が含まれています。これにより、CDN は異なるパラメーターを持つ URL を同じリソースとして扱い、コンテンツエラーや機能障害が発生します。この場合は、「パラメーターの無視」機能を無効にする必要があります。オリジンのレスポンスヘッダー(例:
Cache-Control: no-cache)が CDN にコンテンツをキャッシュしないよう指示しています。この場合は、オリジンのキャッシュポリシーを調整するか、CDN でオリジンのポリシーを上書きするキャッシュ有効期限を設定する必要があります。
キャッシュヒット率が低く、頻繁にオリジンフェッチが発生する
トラブルシューティング:同一リソースに対して複数回 curl -I を実行し、Age および X-Cache レスポンスヘッダーを確認します。Age: 0 または X-Cache: MISS ヘッダーはオリジンフェッチを示します。
ソリューション:
キャッシュルールの TTL が短すぎる、または「キャッシュしない」に設定されています。キャッシュルールを調整して、キャッシュ有効期限を延長してください。
「パラメーターの無視」機能が有効になっていますが、URL にバージョン管理や画像処理に必要なパラメーター(例:
?v=1.1やx-oss-process)が含まれています。これにより、CDN は異なるパラメーターを持つ URL を同じリソースとして扱い、コンテンツエラーや機能障害が発生します。この場合は、「パラメーターの無視」機能を無効にする必要があります。オリジンのレスポンスヘッダー(例:
Cache-Control: no-cache)が CDN にコンテンツをキャッシュしないよう指示しています。この場合は、オリジンのキャッシュポリシーを調整するか、CDN でオリジンのポリシーを上書きするキャッシュ有効期限を設定する必要があります。
ビデオリンクが画像として識別される
原因:ブラウザは Content-Type レスポンスヘッダーからリソースタイプを判断します。OSS 内のビデオファイルの Content-Type が誤って画像タイプ(例:image/jpeg)に設定されている場合、CDN はこのヘッダーをそのまま通過させ、ブラウザがビデオを画像として処理します。この問題は、単に URL にパラメーターを追加するだけでは解決できません。
ソリューション(いずれかを選択):
推奨:CDN コンソールでレスポンスヘッダーを変更:CDN コンソールにログインし、対象ドメインの設定に移動して、
Content-Typeを強制的にvideo/mp4に設定するルールを追加します。このルールはファイル拡張子に基づいて適用できます。オリジン側で修正:OSS コンソールにログインし、対応するビデオファイルを見つけ、ファイル詳細で
Content-Typeを手動でvideo/mp4に変更します。
CDN 高速化ドメイン名に対する OSSBrowser のサポート
OSSBrowser クライアントツールは、CDN 高速化ドメイン名でのログインをサポートしていません。ネイティブ OSS エンドポイントのみを受け付けます。