CDN を使用して、イメージ、ビデオ、ドキュメントなどの Object Storage Service (OSS) に保存されている静的リソースを配信し、トラフィックコストを削減し、リソースの読み込みを高速化できます。
ソリューションの概要
次の図は、CDN を使用して OSS の静的リソースへのアクセスを高速化する方法を示しています。
CDN を使用してアクセスを高速化するには、次の手順を実行します。
静的リソースを保存するための非公開バケットを作成する: 非公開バケットは、バケット内に保存されている静的リソースへの不正アクセスを制限し、CDN がコンテンツ配信速度を向上させるためにデータをキャッシュするオリジンサーバーとして機能します。
高速化するドメイン名を追加し、そのドメイン名の CNAME レコードを追加する: CDN コンソールでドメイン名を追加すると、システムはそのドメイン名に CNAME を割り当てます。次に、DNS サービスプロバイダーのシステムで CNAME レコードを追加して、ドメイン名を CNAME にマッピングする必要があります。このようにして、ユーザーが CDN 高速化ドメイン名を使用してリソースをリクエストすると、オリジンサーバー宛てのリクエストがポイントオブプレゼンス (POP) にリダイレクトされます。
非公開バケットへのオリジンサーバーへのルーティングアクセスを有効にする: 非公開バケットへのオリジンサーバーへのルーティングアクセスを有効にすると、CDN は非公開バケットから静的リソースを取得できます。
前提条件
OSS がアクティブ化されている。
CDNAlibaba Cloud CDNの有効化 がアクティブ化されている。
ドメイン名が登録されている。詳細については、「Alibaba Cloud でドメイン名を登録する」をご参照ください。サードパーティプロバイダーに登録されているドメイン名を使用できます。ドメイン名をお持ちでない場合は、Alibaba Cloud Domains サービスプラットフォームを使用して登録することをお勧めします。
マッピングするバケットが中国本土にある場合は、ドメイン名に対してインターネットコンテンツプロバイダー (ICP) ファイリングが取得されている。詳細については、「ICP ファイリングプロセス」をご参照ください。
手順
手動デプロイ
手順 1: 非公開バケットを作成する
OSS コンソールの [バケット] ページで、[バケットの作成] をクリックします。
[[バケットを作成] パネルで、バケット名を指定し、その他のパラメーターについてはデフォルト設定を保持したまま、[クリック] [OK]。
手順 2: 高速化するドメイン名を追加し、そのドメイン名の CNAME レコードを追加する
以下の手順では、oss.example.com
を CDN 高速化ドメイン名として使用します。ルートドメイン名、サブドメイン、またはワイルドカードドメイン名を CDN 高速化ドメイン名として指定できます。
高速化するドメイン名を追加します。
CDN コンソールの [ドメイン名の追加] ウィザードの [ドメイン名情報の指定] 手順で、次の図に示されているパラメーターを構成し、[次へ] をクリックします。
[ドメイン名] ページで、ドメイン名のステータスが [有効] になるまで待ちます。CNAME をコピーします。この例では、CNAME は oss.example.com.w.kunlunaq.com です。
ドメイン名を解決します。
Alibaba Cloud DNS コンソールの [権威 DNS 解決] ページで、
oss.example.com
の [操作] 列にある [DNS 設定] をクリックします。[DNS 設定] タブで、[DNS レコードの追加] をクリックします。[DNS レコードの追加] ダイアログボックスで、次の図に示されている必須パラメーターを指定し、その他のパラメーターについてはデフォルト設定を保持し、[OK] をクリックします。数分待ってから、ping コマンドを実行して、CDN 高速化ドメイン名が有効になっているかどうかを確認します。コマンド出力が次の図に示されているコマンド出力と同様の場合、CDN 高速化ドメイン名は有効になっています。
手順 3: 非公開バケットへのアクセスを有効にする
CDN コンソールの [ドメイン名] ページで、CDN 高速化ドメイン名をクリックします。
左側のナビゲーションツリーで、[オリジンフェッチ] をクリックし、[Alibaba Cloud OSS 非公開バケットアクセス] をオンにします。
構成の効果を確認する
上記の手順を完了したら、オブジェクトをバケットにアップロードし、CDN 高速化ドメイン名を使用してオブジェクトへのアクセスが高速化されているかどうかを確認できます。
バケットにイメージをアップロードします。
アップロードされたイメージの URL を取得します。
オブジェクト ページで、イメージを見つけ、[操作] 列の [詳細の表示] をクリックします。
[詳細の表示] パネルで、ファイル URLのコピー をクリックして、イメージ URL を取得します。
バケットドメイン名を使用する URL を取得する
イメージのアクセス制御リスト (ACL) は非公開です。バケットドメイン名に基づくイメージ URL には署名情報が含まれています。
CDN 高速化ドメイン名を使用する URL を取得する
CDN 高速化ドメイン名を使用してオブジェクトにアクセスする場合、オブジェクト URL に署名情報を含めないでください。たとえば、コピーされたイメージ URL が
http://oss.example.com/dest.jpg?Expires=1727408333&OSSAccessKeyId=TMP.3********&Signature=eg********
の場合、署名情報を含まないhttps://oss.example.com/dest.jpg
を使用する必要があります。
高速化の結果を確認します。
CloudMonitor コンソールの HTTP 検出 を使用して、バケットドメイン名と CDN 高速化ドメイン名を使用してイメージにアクセスした場合の読み込み時間を比較します。次の図は、CDN 高速化ドメイン名を使用してイメージにアクセスした場合の読み込み時間が 90.04 ミリ秒であるのに対し、バケットドメイン名を使用してイメージにアクセスした場合の読み込み時間が 146.61 ミリ秒であることを示しています。CDN 高速化ドメイン名を使用すると、バケットドメイン名と比較してアクセス速度が約 38% 向上します。
説明上記の高速化結果は参考値です。アクセス速度の向上は、ネットワーク接続や地理的な場所などの要因によって異なります。ほとんどの場合、リクエスト元のリージョンが POP に近いほど、またはネットワーク接続が良いほど、CDN 高速化ドメイン名によるパフォーマンスの向上は大きくなります。
推奨構成
高速化のパフォーマンスをさらに向上させ、データ転送を保護するために、追加機能を有効にして、いくつかの便利な設定を適用できます。
HTTPS セキュアアクセラレーションを有効にする
CDN は HTTPS セキュアアクセラレーションをサポートしています。CDN コンソールに SSL 証明書をデプロイし、HTTPS セキュアアクセラレーションを有効にして、クライアントと POP 間のリクエストを暗号化できます。詳細については、「SSL 証明書を構成する」をご参照ください。
キャッシュヒット率を向上させる
OSS コンソールでCDN キャッシュの自動更新を有効にする: ユーザーが OSS バケットの最新のオブジェクトにアクセスできるようにするには、次の手順を使用して OSS コンソールで自動 CDN キャッシュ更新を有効にします。
[バケット] ページで、バケットを見つけ、バケット名をクリックします。
左側のナビゲーションツリーで、
を選択します。[ドメイン名] ページで、CDN 高速化ドメイン名を見つけ、[CDNキャッシュの自動更新] 列の [サポートされている操作] をクリックします。ドロップダウンリストで、CDN キャッシュの自動更新をトリガーする API 操作 を選択し、[OK] をクリックします。たとえば、OSS へのオブジェクトのアップロードに対して CDN キャッシュを自動的に更新する場合は、
PutObject
、PostObject
、AppendObject
、CompleteMultipartUpload
などのアップロード関連の API 操作を選択できます。通常は、サポートされているすべての操作を選択できます。
重要この機能は、パージタスクが正常に、またはできるだけ早く送信できることを保証するものではありません。できるだけ早くキャッシュをパージする場合、またはパージ結果を取得する場合は、CDN のパージ機能を使用できます。詳細については、「リソースのパージとプリフェッチ」をご参照ください。
キャッシュされたリソースに適切な TTL 値を指定する
イメージやアプリケーションパッケージなど、更新頻度の低い静的リソースには、1 か月以上の Time To Live (TTL) を指定します。
JavaScript ファイルや CSS ファイルなど、更新頻度の高い静的リソースには、ビジネス要件に基づいて TTL を指定します。
PHP、JSP、ASP ファイルなどの動的リソースのキャッシュを無効にするには、TTL を 0 秒に指定します。
詳細については、「リソースのキャッシュルールを作成する」をご参照ください。
不正アクセスから Web サイトを保護する
ホットリンク保護は、リクエストの Referer ヘッダーに基づいてリクエスト元を識別してフィルタリングし、アクセス制御を実装して不正アクセスを防ぎます。Referer ホワイトリストまたはブラックリストを構成すると、CDN はユーザー ID に基づいてリクエストを許可または拒否します。リクエストが許可されると、CDN はリクエストされたリソースの URL を返します。リクエストが拒否されると、CDN は HTTP 403 ステータスコードを返します。詳細については、「Referer ホワイトリストまたはブラックリストを構成してホットリンク保護を有効にする」をご参照ください。
Web サイトのリソースが悪意のあるダウンロードから保護する
CDN によって配信されるコンテンツは、デフォルトで公開されています。オブジェクトの URL を持っているリクエスト元は誰でもオブジェクトにアクセスできます。Web サイト上のリソースへの不正アクセスを防ぐために、URL 署名を構成して、アクセス制御のために URL に署名文字列とタイムスタンプを追加できます。詳細については、「URL 署名を構成する」をご参照ください。
CDN POP でのファイル配信を高速化する
レンジオリジンフェッチを有効にすると、オリジンサーバーとして機能する OSS バケットは、Range ヘッダーで指定されたデータチャンクを POP に返します。これにより、オリジントラフィックが削減され、コンテンツ配信が高速化されます。レンジオリジンフェッチは、オーディオやビデオストリーミングなどの大規模ファイル配信シナリオに適しています。レンジオリジンフェッチは、小規模ファイル配信シナリオには適していません。CDN を使用してイメージの配信を高速化する場合は、レンジオリジンフェッチを有効にする必要はありません。詳細については、「レンジオリジンフェッチ」をご参照ください。
SNI なしのオリジンサーバーへのリクエストが OSS アクセスに影響を与えるのを防ぐ
サーバー名表示 (SNI) なしのオリジンサーバーへのリクエストが原因で OSS アクセスエラーが発生するのを防ぐために、CDN で SNI 設定を構成できます。SNI はオリジンホスト (デフォルトでは CDN 高速化ドメイン名) と同じです。オリジンサーバーへのリクエストに SNI が含まれている場合、OSS は TLS ハンドシェイクフェーズでドメイン名を正しく識別できます。これにより、OSS はドメイン名に一致する証明書を返し、ドメイン名にある程度のアクセス保護を提供できます。OSS が SNI を含まないリクエストを受信した場合、OSS はドメイン名を正しく識別できないため、デフォルトの証明書を返します。TLS ハンドシェイクフェーズでは、SNI なしのすべてのリクエストは同様に扱われます。これにより、トラフィック制限が厳しくなり、SNI なしのリクエストが影響を受ける可能性があります。詳細については、「SNI を構成する」をご参照ください。
FAQ
リクエストがキャッシュにヒットしたかどうかを確認するにはどうすればよいですか?
キャッシュミス
ブラウザの開発者ツールを開き、[X-Cache] フィールドを確認することで、データが POP から配信されているかどうかを確認できます。[X-Cache] フィールドの値が MISS で始まる場合、リクエストされたオブジェクトは POP でキャッシュミスであり、CDN POP は不足しているオブジェクトをオリジンサーバーにリクエストします。
キャッシュヒット
不足しているオブジェクトがオリジンサーバーから取得されると、オブジェクトは POP にキャッシュされます。オブジェクトに対する後続のリクエストの [X-Cache] フィールドの値は HIT で始まり、リクエストされたオブジェクトが POP にキャッシュされ、POP から配信されていることを示します。
CDN は OSS の静的リソースへのアクセスをどのように高速化できますか?
CDN は、世界中の複数のリージョンに POP をデプロイしています。ユーザーが OSS の静的リソースへのアクセスをリクエストすると、CDN はリクエストを最も近い POP にリダイレクトします。このようにして、ユーザーは長距離にわたって OSS リソースに直接アクセスする必要はありません。このメカニズムにより、データ転送距離が大幅に短縮され、ネットワークレイテンシが最小限に抑えられ、データアクセス速度が向上します。
CDN は OSS 上のリソースへのアクセスにかかるトラフィックコストをどのように削減しますか?
バケットのパブリックドメイン名を使用して OSS リソースに直接アクセスする場合、インターネット経由の OSS アウトバウンドトラフィックに対して課金されます。CDN は、OSS に保存されている静的リソースを世界中の POP にキャッシュします。CDN 高速化ドメイン名を使用して OSS リソースにアクセスすると、リソースはオリジンサーバーではなく、最も近い POP から配信されます。CDN からのアウトバウンドデータ転送に対して課金されます。インターネット経由の OSS アウトバウンドトラフィックと比較して、CDN からのアウトバウンドデータ転送の単価は低くなっています。したがって、CDN を使用して OSS リソースにアクセスすると、トラフィックコストを効果的に削減できます。詳細については、「OSS コンテンツ高速化の課金」をご参照ください。
CDN 高速化ドメイン名を使用して OSS に保存されている非公開オブジェクトにアクセスすると、エラーが報告されるのはなぜですか?
原因
非公開バケットへのアクセスを有効にすると、CDN はバケットに送信されるオリジンリクエストに Authorization ヘッダーを追加し、ヘッダー値をバケットの認証署名情報に設定します。オリジンリクエストには、Authorization ヘッダーと URL リクエストパラメーターの両方に署名情報を含めることはできません。バケットに送信されるオリジンリクエストに Authorization ヘッダーがある場合、オブジェクト URL には、
Expires
、Signature
、OSSAccessKeyId
などの署名情報を含めることはできません。そうしないと、OSS 認証が失敗します。解決策
署名情報を含まないオブジェクト URL を使用します。たとえば、非公開オブジェクトの URL が
https://oss.example.com/outside.jpg?Expires=1700628094&OSSAccessKeyId=TMP.3********&Signature=B********
の場合、署名情報を含まない URLhttps://oss.example.com/outside.jpg
を使用します。
非公開バケットへのオリジンサーバーへのルーティングを有効にした後、非公開バケットでホストされている Web サイトのホームページにアクセスしようとすると、エラーが報告されるのはなぜですか?
詳細については、「CDN を使用して非公開バケットからオブジェクトを取得するときに、デフォルトのホームページにアクセスできないのはなぜですか?」をご参照ください。
CDN 高速化ドメイン名を使用して OSS にデータをアップロードできますか?
セキュリティ上の理由から、CDN 高速化ドメイン名を使用して OSS にデータをアップロードすることはお勧めしません。CDN でパブリックの読み取りおよび書き込みアクセスが有効になっている場合、誰でも CDN 高速化ドメイン名を使用して OSS にデータをアップロードできます。認証や権限検証は必要ありません。これにより、OSS バケットは悪意のあるアップロードやデータ改ざんの大きなリスクにさらされます。データアップロードに必要な最小限の権限を付与し、アップロード操作にはバケットドメイン名を使用することをお勧めします。
CDN 高速化ドメイン名に対して、パスに基づいて異なるバケットへのオリジンサーバーへのルーティングを構成するにはどうすればよいですか?
ルールエンジン を使用して、パスに基づいて異なるバケットへのオリジンサーバーへのルーティングを構成できます。