すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:ミラーリングベースのオリジンフェッチ

最終更新日:Aug 05, 2026

クライアントが OSS に存在しないオブジェクトをリクエストした場合、OSS はお客様が指定したオリジンサーバーからそのオブジェクトを自動的にフェッチし、クライアントに返却して、お客様のバケットに保存します。

仕組み

ミラーリングベースのオリジンフェッチ機能は、サーバーサイドプロキシとして動作します。クライアントが OSS バケットに存在しないオブジェクトに対して GET リクエストを送信すると、OSS はそのリクエストがオリジンフェッチルールをトリガーするかどうかを確認します (例:オブジェクト名のプレフィックスに一致し、HTTP 404 エラーを返す場合)。ルールがトリガーされた場合、OSS は指定されたオリジンサーバーに HTTP リクエストを送信してオブジェクトを取得します。オリジンサーバーが 200 OK ステータスコードを返す場合、OSS はそのオブジェクトをクライアントに返すと同時に、バケットに保存します。オリジンサーバーが 404 Not Found またはその他のエラーステータスコードを返す場合、OSS は対応するエラーをクライアントに返します。このプロセスにおいて、OSS はプロキシとして機能し、オンデマンドデータ移行と 1 回限りのキャッシングを実現します。なお、オブジェクトが OSS に保存された後は、オリジンサーバー上のソースオブジェクトが変更されても、自動的に更新されることはありません。

image

Web サイトからの存在しないオブジェクトのフェッチ

これは、ミラーリングベースのオリジンフェッチを設定する最も基本的なシナリオです。クライアントが OSS に存在しないオブジェクトをリクエストすると、OSS は指定されたオリジンサーバーから自動的にそのオブジェクトをフェッチし、バケットに保存します。この例では、examplebucket バケットの examplefolder/ ディレクトリ内でリクエストされたオブジェクトが見つからない場合に、https://example.com/ からオブジェクトをフェッチするルールの設定方法を説明します。

ステップ 1:ミラーリングベースのオリジンフェッチルールの設定

  1. バケットページに移動し、対象のバケット名をクリックします。

  2. ナビゲーションペインで、データ管理 > back-to-origin をクリックします。

  3. back-to-origin ページで、ルールの作成 をクリックします。

  4. ルールの作成 パネルで、パラメーターを設定します。その他のパラメーターはデフォルト値を使用します。

    パラメーター

    設定

    [ソース検索タイプ]

    イメージ を選択します。

    [ソースから取得する場合]

    オブジェクト名のプレフィックス を選択し、テキストボックスに examplefolder/ と入力します。

    [ソースURL]

    最初の列 (プロトコル) で https を選択します。2 番目の列 (ドメイン名) に example.com を入力します。3 番目の列 (パスプレフィックス) は空欄のままにします。パスプレフィックスはドメイン名に追加され、オリジン URL のパスとなります。

  5. [OK] をクリックします。

ステップ 2:ルールの検証

  1. https://examplebucket.oss-cn-hangzhou.aliyuncs.com/examplefolder/example.png にアクセスします。

  2. examplebucket バケットに examplefolder/example.png オブジェクトが存在しない場合、OSS は https://example.com/examplefolder/example.png からオブジェクトをリクエストします。

  3. オブジェクトをフェッチした後、OSS はそれを examplebucket バケットに examplefolder/example.png として保存し、クライアントにオブジェクトを返します。

ディレクトリの置換と完全性の検証

一部のシナリオでは、OSS バケットのディレクトリ構造がオリジンサーバーのディレクトリ構造と異なる場合があります。また、オリジンサーバーからフェッチされたオブジェクトの完全性を確保する必要がある場合もあります。このユースケースでは、ディレクトリをマッピングし、MD5 検証を使用して信頼性の高いデータ転送を確保する方法を説明します。

  • クライアントが China (Hangzhou) リージョンの bucket-01 バケットの examplefolder ディレクトリに存在しないオブジェクトをリクエストすると、OSS は https://example.com ウェブサイトの destfolder ディレクトリからオブジェクトをフェッチします。

  • OSS は、フェッチされたオブジェクトの MD5 ハッシュを検証します。MD5 ハッシュが一致しないオブジェクトは、bucket-01 バケットには保存されません。

手順 1:ミラーリングベースのオリジンフェッチルールの設定

  1. バケットページに移動し、対象のバケット名をクリックします。

  2. ナビゲーションペインで、データ管理 > back-to-origin を選択します。

  3. back-to-origin ページで、ルールの作成 をクリックします。

  4. ルールの作成 パネルで、次の表に従って必要なパラメーターを設定します。他のパラメーターにはデフォルト値を使用します。

    パラメーター

    設定

    ソース検索タイプ

    イメージ を選択します。

    ソースから取得する場合

    オブジェクト名のプレフィックス を選択し、examplefolder/ に設定します。

    ファイルの接頭語の置換または削除

    ファイルの接頭語の置換または削除 を選択し、destfolder/ に設定します。

    説明

    このオプションは、オリジンフェッチ条件に オブジェクト名のプレフィックス を設定した後にのみ表示されます。

    ソースURL

    最初の列を https に、2 番目の列を example.com に設定し、3 番目の列は空のままにします。

    MD5 検証の実行

    MD5 検証の実行 を選択します。オリジンフェッチリクエストへのレスポンスに Content-MD5 ヘッダーが含まれている場合、OSS はフェッチされたオブジェクトの MD5 ハッシュが Content-MD5 ヘッダーの値と一致するかどうかを検証します。

    • 値が一致する場合、クライアントはオブジェクトを受信し、OSS はオブジェクトを保存します。

    • 値が一致しない場合でも、クライアントはオブジェクトを受信しますが、OSS はそれを保存しません。これは、MD5 ハッシュの計算には完全なオブジェクトデータが必要であり、その時点でオブジェクトはすでにクライアントにストリーミングされているためです。

  5. OK をクリックします。

手順 2:ルールの検証

  1. https://bucket-01.oss-cn-hangzhou.aliyuncs.com/examplefolder/example.txt にアクセスします。

  2. examplefolder/example.txt オブジェクトが bucket-01 バケットに存在しない場合、OSS は https://example.com/destfolder/example.txt からオブジェクトをリクエストします。

  3. オブジェクトをフェッチした後、OSS は次の操作を行います。

    • オリジンフェッチリクエストへのレスポンスに Content-MD5 ヘッダーが含まれている場合、OSS はフェッチされたオブジェクトの MD5 ハッシュを計算し、Content-MD5 ヘッダーの値と比較します。値が一致する場合、OSS はオブジェクトを examplefolder/example.txt として bucket-01 バケットに保存し、オブジェクトをクライアントに返します。値が一致しない場合、OSS はオブジェクトをクライアントに返しますが、bucket-01 バケットには保存しません。

    • オリジンフェッチリクエストへのレスポンスに Content-MD5 ヘッダーが含まれていない場合、OSS はオブジェクトを examplefolder/example.txt として bucket-01 バケットに保存し、オブジェクトをクライアントに返します。

ディレクトリに基づくリクエストのルーティング

お客様のビジネスで複数のオリジンサーバーを使用している場合、リクエストされたオブジェクトパスに基づいて、リクエストを異なるサーバーにルーティングできます。このシナリオは、複数のソースからデータを統合したり、分散ストレージアーキテクチャから移行したりする場合に役立ちます。たとえば、同一のディレクトリ構造を持つ 2 つのオリジンサーバー、オリジンサーバー A (https://example.com) とオリジンサーバー B (https://example.org) があり、次のような動作を実装するとします。

  • クライアントが中国 (北京) リージョンの bucket-02/dir1 ディレクトリに存在しないオブジェクトをリクエストした場合、OSS は https://example.com ウェブサイトの example1 ディレクトリからオブジェクトを取得します。

  • クライアントが bucket-02/dir2 ディレクトリに存在しないオブジェクトをリクエストした場合、OSS は https://example.org ウェブサイトの example2 ディレクトリからオブジェクトを取得します。

  • オリジンサーバー A およびオリジンサーバー B にリダイレクトポリシーが設定されているかどうかに応じて、OSS はリダイレクトされたアドレスからオブジェクトをリクエストするかどうかを決定します。

手順 1:ミラーリングベースのオリジンフェッチルールの設定

  1. バケットページに移動し、対象のバケット名をクリックします。

  2. 左側のナビゲーションペインで、データ管理 > back-to-origin を選択します。

  3. [back-to-origin]ページで、ルールの作成 をクリックします。

  4. ルールの作成 パネルで、以下に説明するように 2 つのミラーリングベースのオリジンフェッチルールを設定します。他のパラメーターにはデフォルト値を使用します。

    • ルール 1

      パラメーター

      設定

      [ソース検索タイプ]

      イメージ を選択します。

      [ソースから取得する場合]

      オブジェクト名のプレフィックス を選択し、dir1/ に設定します。

      [ファイルの接頭語の置換または削除]

      ファイルの接頭語の置換または削除 を選択し、example1/ に設定します。

      説明

      このオプションは、オリジンフェッチ条件に オブジェクト名のプレフィックス を設定した後にのみ表示されます。

      [ソースURL]

      最初の列を https に、2 番目の列を example.com に設定し、3 番目の列は空のままにします。

      [3xx 応答]

      要求をリダイレクトするにはソースステーションに従います を選択します。

      説明

      要求をリダイレクトするにはソースステーションに従います が選択されていない場合、OSS はオリジンサーバーが指定したリダイレクトアドレスをクライアントに直接返します。

    • ルール 2

      パラメーター

      設定

      [ソース検索タイプ]

      イメージ を選択します。

      [ソースから取得する場合]

      オブジェクト名のプレフィックス を選択し、dir2/ に設定します。

      [ファイルの接頭語の置換または削除]

      ファイルの接頭語の置換または削除 を選択し、example2/ に設定します。

      説明

      このオプションは、オリジンフェッチ条件に オブジェクト名のプレフィックス を設定した後にのみ表示されます。

      [ソースURL]

      最初の列を https に、2 番目の列を example.org に設定し、3 番目の列は空のままにします。

      [3xx 応答]

      要求をリダイレクトするにはソースステーションに従います を選択します。

  5. OK をクリックします。

手順 2:ルールの検証

  1. https://bucket-02.oss-cn-beijing.aliyuncs.com/dir1/example.txt にアクセスします。

  2. bucket-02 バケットの dir1 ディレクトリに example.txt オブジェクトが存在しない場合、OSS は https://example.com/example1/example.txt にリクエストを送信します。

    • オリジンサーバー A に example1/example.txt のリダイレクトルールがある場合、OSS はリダイレクト先のアドレスに新しいリクエストを送信してオブジェクトを取得します。 取得したオブジェクトは、dir1/example.txt として bucket-02 バケットに保存され、クライアントに返されます。

    • オリジンサーバー A に example1/example.txt のリダイレクトルールがない場合、OSS はオブジェクトを取得し、bucket-02 バケットに dir1/example.txt として保存し、クライアントに返します。

  3. クライアントが https://bucket-02.oss-cn-beijing.aliyuncs.com/dir2/example.txt をリクエストした場合、ミラーリングベースの Back-to-Origin ルールを介して取得されたオブジェクトは、bucket-02 バケットに dir2/example.txt として保存されます。

プライベートバケットからのフェッチとパラメーターの転送

オリジンサーバーがプライベート OSS バケットの場合、必要なアクセス権限を設定する必要があります。また、クライアントリクエストからオリジンサーバーへ特定のパラメーターを転送する必要がある場合もあります。このユースケースでは、プライベート OSS バケットのオリジンフェッチを設定し、パラメーターを転送する方法を説明します。たとえば、China (Shanghai) リージョンに 2 つのバケット、bucket-03 (公開読み取り) と bucket-04 (プライベート) があるとします。以下の動作を実装するものとします。

  • クライアントが bucket-03 バケットの examplefolder ディレクトリに存在しないオブジェクトをリクエストした場合、OSS は bucket-04 バケットの examplefolder ディレクトリからオブジェクトを取得します。

  • OSS は、リクエスト URL のクエリ文字列をオリジンサーバーに転送します。

  • OSS は、リクエストの HTTP ヘッダー header1header2、および header3 をオリジンサーバーに転送します。

手順 1: ミラーリングベースのオリジンフェッチルールの設定

  1. [バケット] ページに移動し、対象のバケット名をクリックします。

  2. 左側のメニューで、データ管理 > back-to-origin を選択します。

  3. back-to-origin ページで、ルールの作成 をクリックします。

  4. ルールの作成 パネルで、次の表に従って必要なパラメーターを設定します。他のパラメーターにはデフォルト値を使用します。

    パラメーター

    設定

    [ソース検索タイプ]

    イメージ を選択します。

    [ソースから取得する場合]

    オブジェクト名のプレフィックス を選択し、examplefolder/ に設定します。

    [発信元の種類]

    [プライベート OSS バケットへのオリジンフェッチ] を選択し、Back-to-origin バケット ドロップダウンリストから bucket-04 を選択します。

    このオプションを設定すると、クライアントが存在しないオブジェクトをリクエストしたときに、OSS はデフォルトのロール AliyunOSSMirrorDefaultRole を使用して、指定されたプライベートオリジンバケットからデータを取得します。これには AliyunOSSReadOnlyAccess 権限が必要です。この権限により、OSS はオリジンデータに読み取り専用モードでしかアクセスできず、変更または削除することはできません。

    プライベート OSS バケットにミラーリング back-to-origin を設定するには、RAM ユーザーには ram:GetRole 権限が必要です。 この権限は、AliyunOSSMirrorDefaultRole ロールが存在するかどうかを確認するために使用されます。

    • ロールが存在する場合、それが直接使用されます。

    • ロールが存在しない場合は、RAM ユーザーに関連付けられているプライマリー Alibaba Cloud アカウントを使用して、事前に AliyunOSSMirrorDefaultRole ロールを作成し、AliyunOSSReadOnlyAccess 権限を付与することをお勧めします。この方法により、RAM ユーザーに、ロールの作成 (ram:CreateRole) やロールへのポリシーのアタッチ (ram:AttachPolicyToRole) などの高リスクな権限を付与することを回避できます。ロールが承認されると、RAM ユーザーは既存のロールを再利用でき、権限設定のリスクが低減されます。

    [ソースURL]

    最初の列を [https] に設定し、他のフィールドは空のままにします。

    [その他のパラメータ]

    queryStringを待つ を選択します。

    OSS はリクエスト URL のクエリ文字列をオリジンサーバーに転送します。

    [「HTTPヘッダー」配信ルールを設定する]

    指定された HTTP ヘッダーパラメーターを送信する を選択し、HTTP ヘッダー header1header2header3 を追加します。バックツーオリジンルールは、authorizationauthorization2rangecontent-lengthdate などの特定の標準 HTTP ヘッダー、または x-oss-oss-x-drs- で始まるヘッダーの転送をサポートしていません。

    重要

    プライベートバケットからフェッチする場合、すべての HTTP ヘッダーを転送するオプションは選択しないでください。オリジンフェッチが失敗するためです。

  5. OK をクリックします。

手順 2: ルールの検証

  1. https://bucket-03.oss-cn-shanghai.aliyuncs.com/examplefolder/example.png?caller=lucas&production=oss にアクセスします。

  2. bucket-03 バケットに examplefolder/example.png オブジェクトが存在しない場合、OSS は https://bucket-04.oss-cn-shanghai.aliyuncs.com/examplefolder/example.png?caller=lucas&production=oss にオブジェクトのリクエストを送信します。

  3. bucket-04 バケットは、転送された ?caller=lucas&production=oss パラメーターに基づいて、example.png オブジェクトを OSS に返します。

  4. OSS は、取得したオブジェクトを bucket-03 バケットの examplefolder/example.png として保存します。

リクエストに header1header2、および header3 HTTP ヘッダーも含まれている場合、OSS はそれらを bucket-04 バケットに渡します。

本番環境でのユースケース

シームレスなデータ移行

移行ソリューションの詳細については、「ミラーリングベースのオリジンフェッチを使用した Alibaba Cloud OSS へのサービスのシームレスな移行」をご参照ください。

キャッシュされたオブジェクトの更新

ミラーリングベースのオリジンフェッチは、1 回限りのキャッシュメカニズムです。オリジンサーバー上のオブジェクトが更新されても、OSS は自動的に更新や再フェッチを行いません。キャッシュされたオブジェクトを手動で更新するには、次の方法を使用できます。

  • 手動削除:コンソールまたは API を使用して、OSS バケットからオブジェクトを削除します。次回オブジェクトにアクセスすると、オリジンフェッチルールが再度トリガーされます。

  • ライフサイクルルール:ミラーリングされたオブジェクトに有効期限ポリシーを設定します。指定された期間後に自動的に削除され、定期的な更新が可能になります。

  • オブジェクト名のバージョン管理:オリジンサーバー上のオブジェクトを更新する際に、新しい名前 (例:style.v2.css) を使用します。これは、キャッシュの問題を回避するために推奨される方法です。

リスク防止とフォールトトレランス

  • オリジンサーバーの負荷:オリジンサーバーに、オリジンフェッチリクエストを処理するための十分な帯域幅と処理能力があることを確認してください。オリジンサーバーの負荷を監視し、オフピーク時間にデータのプレウォーミングを検討することを推奨します。

  • コスト管理:予期しない高額なコストを回避するために、Alibaba Cloud 管理コンソールでコストアラートを設定し、オリジンフェッチリクエストの量を監視することを推奨します。

  • セキュリティ設定:オリジンサーバーが OSS からアクセス可能であることを確認してください。オリジン URL が HTTPS プロトコルを使用している場合は、オリジンサーバーの証明書が信頼できる証明書認証局 (CA) によって発行されていること、ドメイン名が一致していること、および証明書が有効期限切れでないことを確認してください。

  • ログクエリリアルタイムログクエリ 機能を使用して、オリジンフェッチに関連するログを表示します。オリジンフェッチリクエストの User-Agent には、aliyun-oss-mirror という文字列が含まれています。

クォータと制限

  • ルール数と順序:各バケットには、最大 20 個のオリジンフェッチルールを設定できます。ルールは RuleNumber の昇順で照合されます。いずれかのルールに一致すると、そのルールが実行され、後続のルールは確認されません。ルールの横にある 上に移動 または 下に移動 オプションを使用して、照合の優先度を調整できます。

  • QPS と帯域幅

    • 中国本土リージョン:デフォルトの合計 QPS は 2,000、合計帯域幅は 2 Gbit/s です。

    • 中国本土以外のリージョン:デフォルトの合計 QPS は 1,000、合計帯域幅は 1 Gbit/s です。

    • この制限は、該当リージョンにおいて、単一 Alibaba Cloud アカウント配下のすべてのバケットにわたる、ミラーリングベースのオリジンフェッチの合計容量に適用されます。この制限を超えるリクエストはスロットリングされ、503 エラーが返されます。より高いクォータを申請するには、テクニカルサポートにお問い合わせください。

  • オリジンサーバーアドレス:アドレスは、RFC 3986 のエンコーディング標準に準拠した、パブリックにアクセス可能なドメイン名または IP アドレスでなければなりません。内部ネットワークアドレスはサポートされていません

  • タイムアウト:ミラーリングベースのオリジンフェッチのタイムアウトは、デフォルトで 10 秒です。

  • チャンクオリジンフェッチ:オリジンサーバーが範囲リクエストをサポートしており、チャンクオリジンフェッチ機能が必要な場合は、テクニカルサポートにお問い合わせください。

よくある質問

ミラーリングされたオブジェクトのサイズがソースと異なる

ミラーリングされたオブジェクトとソースオブジェクトの間にサイズの不一致が見つかった場合は、次の手順に従って調査してください。

  1. ミラーリングされたオブジェクトとソースオブジェクトの Last-Modified タイムスタンプを確認してください。

    import oss2
    import requests
    from datetime import datetime
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    
    # 環境変数から認証情報を取得します。このコードを実行する前に、
    # OSS_ACCESS_KEY_ID と OSS_ACCESS_KEY_SECRET の環境変数が設定されていることを確認してください。
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    
    # バケットが配置されているリージョンのエンドポイントを指定します。
    # たとえば、China (Hangzhou) の場合、エンドポイントは https://oss-cn-hangzhou.aliyuncs.com です。
    endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
    
    # エンドポイントに対応するリージョン (例:cn-hangzhou) を指定します。
    # このパラメーターは V4 署名に必要です。
    region = "cn-hangzhou"
    
    # "yourBucketName" を、ルールを設定したバケットの名前に置き換えます。
    bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
    # ミラーリングされたオブジェクトのフルパスを指定します。
    object_key = 'yourObjectKey'
    # ソースオブジェクトのフルパスを指定します。
    source_url = 'yourSourceUrl'
    
    # ミラーリングされたオブジェクトの Last-Modified タイムスタンプを取得します。
    oss_object_info = bucket.get_object_meta(object_key)
    oss_last_modified = oss_object_info.headers['last-modified']
    print(f"OSS Last-Modified: {oss_last_modified}")
    
    # ソースオブジェクトの Last-Modified タイムスタンプを取得します。
    response = requests.head(source_url)
    source_last_modified = response.headers.get('last-modified')
    print(f"Source Last-Modified: {source_last_modified}")
    
    # タイムスタンプ文字列を比較のために datetime オブジェクトに変換します。
    oss_time = datetime.strptime(oss_last_modified, '%a, %d %b %Y %H:%M:%S %Z')
    source_time = datetime.strptime(source_last_modified, '%a, %d %b %Y %H:%M:%S %Z')
    
    if oss_time < source_time:
        print("The source object has been updated.")
    elif oss_time > source_time:
        print("The mirrored object is newer.")
    else:
        print("The timestamps of the two objects are identical.")
    • ソースファイルの Last-Modified タイムスタンプがミラーリングされたファイルの Last-Modified タイムスタンプより後の場合、ミラーリングされたファイルが生成された後にソースファイルが更新された可能性があります。

      説明

      OSS がオリジンサーバーからオブジェクトをフェッチしてバケットに書き込む際、ソースオブジェクトの Last-Modified タイムスタンプは保持されません。代わりに、OSS はミラーリングされたオブジェクトの Last-Modified タイムスタンプを、OSS で作成または更新された時刻に設定します。

    • ソースファイルの Last-Modified タイムスタンプが、ミラーリングされたオブジェクトの Last-Modified タイムスタンプ である場合、ミラーリングされたオブジェクトが生成されてからソースファイルは更新されていません。次のステップでは、両方のファイルの MD5 または CRC64 のチェックサム値を確認します。

  2. ミラーリングされたオブジェクトとソースオブジェクトの MD5 または CRC64 チェックサムを比較してください。

    # -*- coding: utf-8 -*-
    import oss2
    import hashlib
    import requests
    # CRC64 比較の場合、Python の標準ライブラリは CRC64 をサポートしていません。
    # crcmod のようなサードパーティライブラリを使用できます。
    # crcmod のインストール:pip install crcmod
    import crcmod
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    
    # 環境変数から認証情報を取得します。このコードを実行する前に、
    # OSS_ACCESS_KEY_ID と OSS_ACCESS_KEY_SECRET の環境変数が設定されていることを確認してください。
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    
    # バケットが配置されているリージョンのエンドポイントを指定します。
    # たとえば、China (Hangzhou) の場合、エンドポイントは https://oss-cn-hangzhou.aliyuncs.com です。
    endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
    
    # エンドポイントに対応するリージョン (例:cn-hangzhou) を指定します。
    # このパラメーターは V4 署名に必要です。
    region = "cn-hangzhou"
    
    # "yourBucketName" を、ルールを設定したバケットの名前に置き換えます。
    bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
    # ミラーリングされたオブジェクトのフルパスを指定します。
    object_key = 'yourObjectKey'
    # ソースオブジェクトのフルパスを指定します。
    source_url = 'yourSourceUrl'
    
    # ミラーリングされたオブジェクトのメタデータを取得します。
    oss_object_info = bucket.get_object_meta(object_key)
    
    oss_md5 = oss_object_info.headers.get('etag', '').strip('"')  # ETag は通常 MD5 ハッシュです
    oss_crc64 = oss_object_info.headers.get('x-oss-hash-crc64ecma', '')
    
    print(f"OSS MD5: {oss_md5}")
    print(f"OSS CRC64: {oss_crc64}")
    
    # ソースオブジェクトのコンテンツを取得し、その MD5 と CRC64 を計算します。
    response = requests.get(source_url)
    if response.status_code == 200:
        source_content = response.content
        source_md5 = hashlib.md5(source_content).hexdigest()
        print(f"Source MD5: {source_md5}")
    
        crc64_func = crcmod.predefined.mkCrcFun('crc-64')
        source_crc64 = hex(crc64_func(source_content))[2:].upper().zfill(16)  # 16 進文字列に変換してフォーマットします
        print(f"Source CRC64: {source_crc64}")
    
        # MD5 値を比較します。
        if oss_md5 == source_md5:
            print("MD5 checksums are identical.")
        else:
            print("MD5 checksums do not match.")
    
        # CRC64 値を比較します。
        if oss_crc64.upper() == source_crc64:
            print("CRC64 checksums are identical.")
        else:
            print("CRC64 checksums do not match.")
    else:
        print(f"Failed to fetch source file. HTTP Status Code: {response.status_code}")
        
    • MD5 または CRC64 のチェックサムが同一である場合、2 つのオブジェクトのコンテンツは同じです。この場合、サイズも同一であるはずです。

    • MD5 または CRC64 のチェックサムが一致しない場合、2 つのオブジェクトのコンテンツは異なります。次のステップに進み、特別なリクエストヘッダーを確認してください。

  3. 特別なリクエストヘッダーを確認してください。

    root@qa ~ # ossutil stat oss://xxx
    ACL                          : default
    Accept-Ranges                : bytes
    Content-Encoding             : gzip
    Content-Length               : 1051
    Content-Md5                  : ZMRnM8Rycyel
    Content-Type                 : text/plain
    Etag                         : "64C46733C4xxx"
    Last-Modified                : 2025-01-26 13:32:49 +0800 CST
    Owner                        : xxx
    Vary                         : Origin
    X-Oss-Expiration             : expiry-date="Mon, 27 Jan 2025 00:00:00 GMT", rule-id="004xxx"
    X-Oss-Hash-Crc64ecma         : 4241986122514178170
    X-Oss-Object-Type            : Normal
    X-Oss-Storage-Class          : Standard
    X-Oss-Version-Id             : CAEQORiBgIDmrLKEpRxxx
    
    0.092282(s) elapsed
    root@qa ~ # ossutil stat oss://yyy
    ACL                          : public-read
    Accept-Ranges                : bytes
    Content-Length               : 1048576
    Content-Md5                  : ttgBkgMcfgU
    Content-Type                 : text/plain
    Etag                         : "B6D818360A56xxx"
    Last-Modified                : 2024-05-29 13:06:16 +0800 CST
    Owner                        : xxx
    Vary                         : Accept-Encoding
    X-Oss-Expiration             : expiry-date="Thu, 30 May 2024 00:00:00 GMT", rule-id="60fxxx"
    X-Oss-Hash-Crc64ecma         : 6947790692288575170
    X-Oss-Object-Type            : Normal
    X-Oss-Server-Side-Encryption : KMS
    X-Oss-Server-Side-Encryption-Key-Id: xxx
    X-Oss-Storage-Class          : Standard
    X-Oss-Version-Id             : CAEQMRiBgIDnSvuK_hgiIDRlNG
    
    0.120707(s) elapsed
    • オリジンフェッチリクエストに、Accept-Encoding: gzip, deflate, br のような特別な HTTP リクエストヘッダーが含まれているかどうかを確認してください。このヘッダーは、クライアントが圧縮データを受け入れられることを示します。

    • オリジンフェッチリクエストが HTTP 圧縮を使用し、リクエストされたオブジェクトが圧縮基準を満たしている場合、2 つのオブジェクトのサイズは異なります。

    • Accept-Encoding ヘッダーが存在する場合は、それを転送しないでください。

      • すべての HTTP ヘッダーを転送するようにルールを設定している場合は、禁止ヘッダーのリストに accept-encoding を追加してください。

      • 特定の HTTP ヘッダーを転送するようにルールを設定している場合は、指定されたヘッダーのリストに accept-encoding含まれていないことを確認してください。

        指定された HTTP ヘッダーパラメーターを送信する を選択し、パラメーター入力フィールドに content-type を追加してください。

オリジンフェッチの失敗に関するトラブルシューティング

オリジンフェッチの失敗 (424 MirrorFailed エラーなど) が発生した場合は、以下の手順に従って問題をトラブルシューティングできます。

  1. オリジンサーバーの到達可能性を確認してください。

    # URL を実際のオリジンサーバーアドレスとファイルパスに置き換えます
    curl -I "https://www.example.com/images/test.jpg"
  2. DNS 名前解決を確認してください。

    # ドメイン名を実際のオリジンドメイン名に置き換えます
    nslookup www.example.com
  3. HTTPS 証明書を確認してください (オリジンサーバーが HTTPS を使用している場合)。

    # ドメイン名を実際のオリジンドメイン名に置き換えます
    openssl s_client -connect www.example.com:443 -servername www.example.com
  4. OSS のリアルタイムログクエリ機能を使用して問題を分析してください。

ミラーリングされたオブジェクトが作成されない

クライアントの HEAD リクエストは、サイズやタイプなどのオブジェクトメタデータのみを取得し、コンテンツはダウンロードしません。したがって、HEAD リクエストは、オリジンサーバーからオブジェクトをフェッチして OSS バケットに書き込むためのミラーリングベースのオリジンフェッチルールをトリガーしません。

オリジンフェッチからの予期しないステータスコード

リクエストがミラーリングベースのオリジンフェッチをトリガーした際に、オリジンサーバーが 404、200、または 206 以外のステータスコードを返した場合、オリジンサーバーのレスポンスを分析してください。

  • オリジンが OSS の場合:以下の設定項目を確認してください。

    • 特定の HTTP ヘッダーの転送を禁止する:オリジンサーバー情報の漏洩を避け、オリジンフェッチリクエストが期待どおりに処理されるようにするために、host ヘッダーの転送を禁止してください。host ヘッダーの転送を禁止しない場合、オリジンフェッチリクエストはターゲットバケットの host 値をオリジンサーバーに渡します。各バケットの host 値は一意であるため、リクエストされた host がオリジンの実際の host と一致しない場合、オリジンサーバーは 403 エラーを返します。その後、OSS はクライアントに 424 エラーを返します。

    • プライベート OSS バケットへのオリジンフェッチ:権限が設定されていない場合は、ターゲットバケットとそのオブジェクトの ACL が public-read に設定されているかどうかを確認してください。権限が設定されている場合は、ミラーリングベースのオリジンフェッチのロール承認ポリシーが変更され、権限が不十分になっていないかを確認してください。ミラーリングベースのオリジンフェッチのデフォルトロールは AliyunOSSMirrorDefaultRole で、そのデフォルトシステムポリシーは AliyunOSSReadOnlyAccess です。

  • オリジンが OSS でない場合:サーバー側のログを分析し、Server Name Indication (SNI)、オリジンフェッチパラメーター、およびヘッダー転送の設定を確認して、オリジンサーバーエラーの具体的な原因を特定してください。オリジンサーバーは、401 (Unauthorized)、403 (Forbidden)、または 5xx (Server Internal Error) などのステータスコードを返す場合があります。

オリジンフェッチルールの照合順序

ルールは、ルール番号 (RuleNumber) に基づいて昇順で照合されます。条件を満たす最初のルールが一致すると、そのルールが直ちに実行され、後続のルールは照合されません。

VPC または内部 IP からのフェッチ

いいえ。オリジンサーバーには、一般公開されているアドレスが必要です。VPC 内のサービスにアクセスするには、NAT Gateway またはインターネット向け SLB インスタンスを使用して、サービスをパブリックインターネットに公開する必要があります。

ソース更新後に OSS オブジェクトが更新されない

ミラーリングベースのオリジンフェッチは 1 回限りのプルメカニズムであり、オリジンサーバーからの更新を自動的に同期しません。更新されたオブジェクトをフェッチするには、ミラーリングされたオブジェクトを OSS から手動で削除するか、オブジェクト名のバージョニング戦略を使用する必要があります。