All Products
Search
Document Center

Object Storage Service:Pengembalian ke sumber berbasis mirroring

Last Updated:Aug 05, 2026

Ketika klien meminta objek yang tidak ada di OSS, OSS secara otomatis mengambil objek tersebut dari server origin yang Anda tentukan, mengembalikannya ke klien, dan menyimpannya di bucket Anda.

Cara kerja

Fitur pengembalian ke sumber berbasis mirroring beroperasi sebagai server-side proxy. Ketika klien mengirim permintaan GET untuk objek yang tidak ada di bucket OSS, OSS memeriksa apakah permintaan tersebut memicu aturan pengembalian ke sumber (misalnya, dengan mencocokkan awalan nama objek dan mengembalikan error HTTP 404). Jika aturan dipicu, OSS mengirim permintaan HTTP ke server origin yang ditentukan untuk mengambil objek tersebut. Jika server origin mengembalikan kode status 200 OK, OSS mengembalikan objek tersebut ke klien sekaligus menyimpannya di bucket. Jika server origin mengembalikan kode status 404 Not Found atau error lainnya, OSS mengembalikan error yang sesuai ke klien. Dalam proses ini, OSS bertindak sebagai proxy, memungkinkan migrasi data sesuai permintaan dan caching satu kali. Perhatikan bahwa setelah objek disimpan di OSS, objek tersebut tidak diperbarui secara otomatis meskipun objek sumber di server origin berubah.

Ambil objek yang hilang dari website

Ini adalah skenario paling dasar untuk mengonfigurasi pengembalian ke sumber berbasis mirroring. Ketika klien meminta objek yang tidak ada di OSS, OSS secara otomatis mengambilnya dari server origin yang ditentukan dan menyimpannya di bucket. Contoh ini menunjukkan cara mengonfigurasi aturan untuk mengambil objek dari https://example.com/ ketika objek yang diminta tidak ditemukan di direktori examplefolder/ bucket examplebucket.

Langkah 1: Konfigurasikan aturan pengembalian ke sumber berbasis mirroring

  1. Buka halaman Buckets dan klik nama bucket target.

  2. Di panel navigasi sebelah kiri, pilih Data Management > Mirroring-based Back-to-origin.

  3. Di halaman Mirroring-based Back-to-origin, klik Create Rule.

  4. Di panel Create Rule, konfigurasikan parameter berikut. Gunakan nilai default untuk parameter lainnya.

    Parameter

    Konfigurasi

    Method

    Pilih Image.

    Condition

    Pilih Object Name Prefix dan masukkan examplefolder/ di kotak teks.

    Origin URL

    Di kolom pertama (Protocol), pilih https. Di kolom kedua (Domain Name), masukkan example.com. Biarkan kolom ketiga (Path Prefix) kosong. Awalan path ditambahkan ke nama domain untuk membentuk path URL asal.

  5. Klik OK.

Langkah 2: Verifikasi aturan

  1. Akses https://examplebucket.oss-cn-hangzhou.aliyuncs.com/examplefolder/example.txt.

  2. Jika objek examplefolder/example.txt tidak ada di bucket examplebucket, OSS meminta objek tersebut dari https://example.com/examplefolder/example.txt.

  3. Setelah mengambil objek, OSS menyimpannya sebagai examplefolder/example.txt di bucket examplebucket dan mengembalikan objek tersebut ke klien.

Ganti direktori dan verifikasi integritas

Dalam beberapa skenario, struktur direktori di bucket OSS Anda mungkin berbeda dari server origin. Anda juga mungkin perlu memastikan integritas objek yang diambil dari server origin. Kasus penggunaan ini menunjukkan cara memetakan direktori dan menggunakan verifikasi MD5 untuk memastikan transfer data yang andal.

  • Ketika klien meminta objek yang tidak ada di direktori examplefolder bucket bucket-01 di wilayah Tiongkok (Hangzhou), OSS mengambil objek tersebut dari direktori destfolder website https://example.com.

  • OSS memverifikasi hash MD5 objek yang diambil. Objek dengan hash MD5 yang tidak cocok tidak disimpan ke bucket bucket-01.

Langkah 1: Konfigurasikan aturan pengembalian ke sumber berbasis mirroring

  1. Buka halaman Buckets dan klik nama bucket target.

  2. Di panel navigasi sebelah kiri, pilih Data Management > Mirroring-based Back-to-origin.

  3. Di halaman Mirroring-based Back-to-origin, klik Create Rule.

  4. Di panel Create Rule, konfigurasikan parameter yang diperlukan seperti pada tabel berikut. Gunakan nilai default untuk parameter lainnya.

    Parameter

    Konfigurasi

    Method

    Pilih Image.

    Condition

    Pilih Object Name Prefix dan atur menjadi examplefolder/.

    Replace or Delete File Prefix

    Pilih Replace or Delete File Prefix dan atur menjadi destfolder/.

    Catatan

    Opsi ini hanya ditampilkan setelah Anda mengatur Object Name Prefix untuk kondisi pengembalian ke sumber.

    Origin URL

    Atur kolom pertama ke https, kolom kedua ke example.com, dan biarkan kolom ketiga kosong.

    MD5 Verification

    Pilih Perform MD5 verification. Jika respons terhadap permintaan pengembalian ke sumber berisi header Content-MD5, OSS memverifikasi apakah hash MD5 objek yang diambil cocok dengan nilai header Content-MD5.

    • Jika nilainya cocok, klien menerima objek tersebut, dan OSS menyimpan objek tersebut.

    • Jika nilainya tidak cocok, klien tetap menerima objek tersebut, tetapi OSS tidak menyimpannya. Hal ini karena perhitungan hash MD5 memerlukan data objek lengkap, dan pada titik tersebut, objek telah dialirkan ke klien.

  5. Klik OK.

Langkah 2: Verifikasi aturan

  1. Akses https://bucket-01.oss-cn-hangzhou.aliyuncs.com/examplefolder/example.txt.

  2. Jika objek examplefolder/example.txt tidak ada di bucket bucket-01, OSS meminta objek tersebut dari https://example.com/destfolder/example.txt.

  3. Setelah mengambil objek, OSS melakukan operasi berikut:

    • Jika respons terhadap permintaan pengembalian ke sumber berisi header Content-MD5, OSS menghitung hash MD5 objek yang diambil dan membandingkannya dengan nilai header Content-MD5. Jika nilainya cocok, OSS menyimpan objek sebagai examplefolder/example.txt ke bucket bucket-01 dan mengembalikan objek tersebut ke klien. Jika nilainya tidak cocok, OSS mengembalikan objek tersebut ke klien tetapi tidak menyimpannya ke bucket bucket-01.

    • Jika respons terhadap permintaan pengembalian ke sumber tidak berisi header Content-MD5, OSS menyimpan objek sebagai examplefolder/example.txt ke bucket bucket-01 dan mengembalikan objek tersebut ke klien.

Rutekan permintaan berdasarkan direktori

Jika bisnis Anda melibatkan beberapa server origin, Anda dapat merutekan permintaan ke server berbeda berdasarkan path objek yang diminta. Skenario ini berguna untuk mengonsolidasi data dari beberapa sumber atau melakukan migrasi dari arsitektur penyimpanan terdistribusi. Misalnya, Anda memiliki dua server origin dengan struktur direktori identik, Server Origin A (https://example.com) dan Server Origin B (https://example.org), dan Anda ingin menerapkan perilaku berikut:

  • Ketika klien meminta objek yang tidak ada di direktori bucket-02/dir1 di wilayah Tiongkok (Beijing), OSS mengambil objek tersebut dari direktori example1 website https://example.com.

  • Ketika klien meminta objek yang tidak ada di direktori bucket-02/dir2, OSS mengambil objek tersebut dari direktori example2 website https://example.org.

  • Bergantung pada apakah kebijakan redirect dikonfigurasi di Server Origin A dan Server Origin B, OSS menentukan apakah akan meminta objek dari alamat yang diarahkan.

Langkah 1: Konfigurasikan aturan pengembalian ke sumber berbasis mirroring

  1. Buka halaman Buckets dan klik nama bucket target.

  2. Di panel navigasi sebelah kiri, pilih Data Management > Mirroring-based Back-to-origin.

  3. Di halaman Mirroring-based Back-to-origin, klik Create Rule.

  4. Di panel Create Rule, konfigurasikan dua aturan pengembalian ke sumber berbasis mirroring seperti dijelaskan di bawah ini. Gunakan nilai default untuk parameter lainnya.

    • Aturan 1

      Parameter

      Konfigurasi

      Method

      Pilih Image.

      Condition

      Pilih Object Name Prefix dan atur menjadi dir1/.

      Replace or Delete File Prefix

      Pilih Replace or Delete File Prefix dan atur menjadi example1/.

      Catatan

      Opsi ini hanya ditampilkan setelah Anda mengatur Object Name Prefix untuk kondisi pengembalian ke sumber.

      Origin URL

      Atur kolom pertama ke https, kolom kedua ke example.com, dan biarkan kolom ketiga kosong.

      3xx Response

      Pilih Follow Origin to Redirect Request.

      Catatan

      Jika Follow Origin to Redirect Request tidak dipilih, OSS mengembalikan alamat redirect yang ditentukan oleh server origin langsung ke klien.

    • Aturan 2

      Parameter

      Konfigurasi

      Method

      Pilih Image.

      Condition

      Pilih Object Name Prefix dan atur menjadi dir2/.

      Replace or Delete File Prefix

      Pilih Replace or Delete File Prefix dan atur menjadi example2/.

      Catatan

      Opsi ini hanya ditampilkan setelah Anda mengatur Object Name Prefix untuk kondisi pengembalian ke sumber.

      Origin URL

      Atur kolom pertama ke https, kolom kedua ke example.org, dan biarkan kolom ketiga kosong.

      3xx Response

      Pilih Follow Origin to Redirect Request.

  5. Klik OK.

Langkah 2: Verifikasi aturan

  1. Akses https://bucket-02.oss-cn-beijing.aliyuncs.com/dir1/example.txt.

  2. Jika objek example.txt tidak ada di direktori dir1 bucket bucket-02, OSS mengirim permintaan objek tersebut ke https://example.com/example1/example.txt.

    • Jika Server Origin A memiliki aturan redirect untuk example1/example.txt, OSS mengirim permintaan baru ke alamat yang diarahkan. Setelah mengambil objek, OSS menyimpannya sebagai dir1/example.txt ke bucket bucket-02 dan mengembalikannya ke klien.

    • Jika Server Origin A tidak memiliki aturan redirect untuk example1/example.txt, OSS mengambil objek tersebut, menyimpannya sebagai dir1/example.txt ke bucket bucket-02, dan mengembalikannya ke klien.

  3. Jika klien meminta https://bucket-02.oss-cn-beijing.aliyuncs.com/dir2/example.txt, objek yang diambil melalui aturan pengembalian ke sumber berbasis mirroring disimpan sebagai dir2/example.txt di bucket bucket-02.

Ambil dari bucket pribadi dan teruskan parameter

Ketika server origin Anda adalah bucket OSS pribadi, Anda harus mengonfigurasi izin akses yang diperlukan. Anda juga mungkin perlu meneruskan parameter tertentu dari permintaan klien ke server origin. Kasus penggunaan ini menunjukkan cara mengonfigurasi pengembalian ke sumber untuk bucket OSS pribadi dan meneruskan parameter. Misalnya, Anda memiliki dua bucket di wilayah Tiongkok (Shanghai): bucket-03 (baca-publik) dan bucket-04 (pribadi). Anda ingin menerapkan perilaku berikut:

  • Ketika klien meminta objek yang tidak ada di direktori examplefolder bucket bucket-03, OSS mengambil objek tersebut dari direktori examplefolder bucket bucket-04.

  • OSS meneruskan string kueri dari URL permintaan ke server origin.

  • OSS meneruskan header HTTP header1, header2, dan header3 dari permintaan ke server origin.

Langkah 1: Konfigurasikan aturan pengembalian ke sumber berbasis mirroring

  1. Buka halaman Buckets dan klik nama bucket target.

  2. Di panel navigasi sebelah kiri, pilih Data Management > Mirroring-based Back-to-origin.

  3. Di halaman Mirroring-based Back-to-origin, klik Create Rule.

  4. Di panel Create Rule, konfigurasikan parameter yang diperlukan seperti pada tabel berikut. Gunakan nilai default untuk parameter lainnya.

    Parameter

    Konfigurasi

    Method

    Pilih Image.

    Condition

    Pilih Object Name Prefix dan atur menjadi examplefolder/.

    Origin Type

    Pilih Back-to-origin to Private OSS Bucket, lalu pilih bucket-04 dari daftar drop-down Source Bucket.

    Setelah opsi ini dikonfigurasi, ketika klien meminta objek yang tidak ada, OSS menggunakan role default AliyunOSSMirrorDefaultRole untuk mengambil data dari bucket origin pribadi yang ditentukan. Ini memerlukan izin AliyunOSSReadOnlyAccess, yang memastikan bahwa OSS hanya dapat mengakses data origin dalam mode read-only dan tidak dapat memodifikasi atau menghapusnya.

    Untuk mengonfigurasi pengembalian ke sumber berbasis mirroring untuk bucket OSS pribadi, pengguna RAM harus memiliki izin ram:GetRole. Izin ini digunakan untuk memeriksa apakah role AliyunOSSMirrorDefaultRole ada.

    • Jika role tersebut ada, role tersebut digunakan langsung.

    • Jika role tersebut tidak ada, kami menyarankan agar Anda menggunakan akun Alibaba Cloud utama yang terkait dengan pengguna RAM untuk membuat role AliyunOSSMirrorDefaultRole terlebih dahulu dan memberikan izin AliyunOSSReadOnlyAccess. Praktik ini menghindari pemberian izin berisiko tinggi, seperti membuat role (ram:CreateRole) dan melampirkan kebijakan ke role (ram:AttachPolicyToRole), kepada pengguna RAM. Setelah role diberi otorisasi, pengguna RAM dapat menggunakan kembali role yang ada, sehingga mengurangi risiko konfigurasi izin.

    Origin URL

    Atur kolom pertama ke https dan biarkan kolom lainnya kosong.

    Origin Parameter

    Pilih Transfer with Query String.

    OSS meneruskan string kueri dari permintaan URL ke server origin.

    Set Transmission Rule of HTTP Header

    Pilih Transmit Specific HTTP Headers dan tambahkan header HTTP header1, header2, dan header3. Aturan pengembalian ke sumber tidak mendukung penerusan header HTTP standar tertentu, seperti authorization, authorization2, range, content-length, dan date, atau header apa pun yang diawali dengan x-oss-, oss-, atau x-drs-.

    Penting

    Saat mengambil dari bucket pribadi, jangan pilih opsi untuk meneruskan semua header HTTP. Hal ini menyebabkan pengambilan pengembalian ke sumber gagal.

  5. Klik OK.

Langkah 2: Verifikasi aturan

  1. Akses https://bucket-03.oss-cn-shanghai.aliyuncs.com/examplefolder/example.png?caller=lucas&production=oss.

  2. Jika objek examplefolder/example.png tidak ada di bucket bucket-03, OSS mengirim permintaan objek tersebut ke https://bucket-04.oss-cn-shanghai.aliyuncs.com/examplefolder/example.png?caller=lucas&production=oss.

  3. Bucket bucket-04 mengembalikan objek example.png ke OSS berdasarkan parameter yang diteruskan ?caller=lucas&production=oss.

  4. OSS menyimpan objek yang diambil sebagai examplefolder/example.png di bucket bucket-03.

Jika permintaan juga membawa header HTTP header1, header2, dan header3, OSS juga meneruskannya ke bucket bucket-04.

Kasus penggunaan produksi

Migrasi data tanpa gangguan

Untuk informasi lebih lanjut tentang solusi migrasi, lihat Migrasi layanan ke Alibaba Cloud OSS tanpa gangguan menggunakan pengembalian ke sumber berbasis mirroring.

Segarkan objek yang di-cache

Pengembalian ke sumber berbasis mirroring adalah mekanisme caching satu kali. Jika objek di server origin diperbarui, OSS tidak secara otomatis menyegarkan atau mengambil ulang objek tersebut. Anda dapat menggunakan metode berikut untuk menyegarkan objek yang di-cache secara manual.

  • Penghapusan manual: Hapus objek dari bucket OSS menggunakan konsol atau API. Saat objek diakses berikutnya, aturan pengembalian ke sumber akan dipicu lagi.

  • Aturan siklus hidup: Konfigurasikan kebijakan kedaluwarsa untuk objek yang dicerminkan. Objek tersebut akan dihapus secara otomatis setelah periode tertentu, memungkinkan penyegaran berkala.

  • Pengendalian versi nama objek: Saat Anda memperbarui objek di server origin, gunakan nama baru (misalnya, style.v2.css). Ini adalah pendekatan yang direkomendasikan untuk menghindari masalah caching.

Pencegahan risiko dan toleransi kesalahan

  • Beban server origin: Pastikan server origin Anda memiliki bandwidth dan kapasitas pemrosesan yang cukup untuk menangani permintaan pengembalian ke sumber. Kami menyarankan agar Anda memantau beban server origin dan mempertimbangkan untuk melakukan pre-warming data selama jam sepi.

  • Kontrol biaya: Untuk menghindari biaya tinggi yang tidak terduga, kami menyarankan agar Anda mengatur peringatan biaya di Konsol Manajemen Alibaba Cloud untuk memantau volume permintaan pengembalian ke sumber.

  • Konfigurasi keamanan: Pastikan server origin Anda dapat diakses oleh OSS. Jika URL origin menggunakan protokol HTTPS, pastikan sertifikat server origin dikeluarkan oleh Certificate Authority (CA) tepercaya, nama domain cocok, dan sertifikat belum kedaluwarsa.

  • Kueri log: Gunakan fitur real-time log query untuk melihat log terkait pengembalian ke sumber. User-Agent untuk permintaan pengembalian ke sumber berisi string aliyun-oss-mirror.

Kuota dan batasan

  • Jumlah dan urutan aturan: Anda dapat mengonfigurasi hingga 20 aturan pengembalian ke sumber untuk setiap bucket. Aturan dicocokkan dalam urutan naik berdasarkan RuleNumber. Setelah aturan dicocokkan, aturan tersebut dieksekusi, dan aturan berikutnya tidak diperiksa. Anda dapat menyesuaikan prioritas pencocokan dengan menggunakan opsi Up atau Down di samping aturan.

  • QPS dan bandwidth:

    • Wilayah di Tiongkok daratan: QPS total default adalah 2.000, dan bandwidth total adalah 2 Gbit/s.

    • Wilayah di luar Tiongkok daratan: QPS total default adalah 1.000, dan bandwidth total adalah 1 Gbit/s.

    • Batasan ini berlaku untuk kapasitas pengembalian ke sumber berbasis mirroring total untuk semua bucket yang dimiliki oleh satu Akun Alibaba Cloud di wilayah yang sesuai. Permintaan yang melebihi batasan ini akan dikendalikan alirannya, dan error 503 dikembalikan. Untuk meminta kuota yang lebih tinggi, hubungi Technical Support.

  • Alamat server origin: Alamat harus berupa nama domain atau alamat IP yang dapat diakses publik dan mematuhi standar pengkodean RFC 3986. Alamat jaringan internal tidak didukung.

  • Timeout: Timeout default untuk pengembalian ke sumber berbasis mirroring adalah 10 detik.

  • Pengembalian ke sumber berbasis chunk: Jika server origin Anda mendukung permintaan range dan Anda memerlukan fitur pengembalian ke sumber berbasis chunk, hubungi Technical Support.

FAQ

Ukuran objek yang dicerminkan berbeda dari sumber

Jika Anda menemukan perbedaan ukuran antara objek yang dicerminkan dan objek sumber, ikuti langkah-langkah berikut untuk menyelidiki.

  1. Periksa stempel waktu Last-Modified objek yang dicerminkan dan objek sumber.

    import oss2
    import requests
    from datetime import datetime
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    
    # Dapatkan kredensial dari variabel lingkungan. Sebelum menjalankan kode ini,
    # pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    
    # Tentukan titik akhir untuk wilayah tempat bucket Anda berada.
    # Misalnya, untuk Tiongkok (Hangzhou), titik akhirnya adalah https://oss-cn-hangzhou.aliyuncs.com.
    endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
    
    # Tentukan wilayah yang sesuai dengan titik akhir, misalnya cn-hangzhou.
    # Parameter ini diperlukan untuk tanda tangan V4.
    region = "cn-hangzhou"
    
    # Ganti "yourBucketName" dengan nama bucket tempat Anda mengonfigurasi aturan.
    bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
    # Tentukan path lengkap objek yang dicerminkan.
    object_key = 'yourObjectKey'
    # Tentukan path lengkap objek sumber.
    source_url = 'yourSourceUrl'
    
    # Dapatkan stempel waktu Last-Modified objek yang dicerminkan.
    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}")
    
    # Dapatkan stempel waktu Last-Modified objek sumber.
    response = requests.head(source_url)
    source_last_modified = response.headers.get('last-modified')
    print(f"Source Last-Modified: {source_last_modified}")
    
    # Konversi string stempel waktu ke objek datetime untuk perbandingan.
    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("Objek sumber telah diperbarui.")
    elif oss_time > source_time:
        print("Objek yang dicerminkan lebih baru.")
    else:
        print("Stempel waktu kedua objek identik.")
    • Jika stempel waktu Last-Modified file sumber lebih besar dari stempel waktu Last-Modified file yang dicerminkan, ini menunjukkan bahwa file sumber mungkin telah diperbarui setelah file yang dicerminkan dibuat.

      Catatan

      Saat OSS mengambil objek dari server origin dan menulisnya ke bucket, OSS tidak mempertahankan stempel waktu Last-Modified objek sumber. Sebaliknya, OSS mengatur stempel waktu Last-Modified objek yang dicerminkan ke waktu objek tersebut dibuat atau diperbarui di OSS.

    • Jika stempel waktu Last-Modified file sumber adalah stempel waktu Last-Modified file pengembalian ke sumber berbasis mirroring, ini menunjukkan bahwa file sumber belum diperbarui sejak file pengembalian ke sumber berbasis mirroring dibuat. Langkah selanjutnya adalah memeriksa nilai checksum MD5 atau CRC64 kedua file tersebut.

  2. Bandingkan checksum MD5 atau CRC64 objek yang dicerminkan dan objek sumber.

    # -*- coding: utf-8 -*-
    import oss2
    import hashlib
    import requests
    # Untuk perbandingan CRC64, pustaka standar Python tidak mendukung CRC64.
    # Anda dapat menggunakan pustaka pihak ketiga seperti crcmod.
    # Instal crcmod: pip install crcmod
    import crcmod
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    
    # Dapatkan kredensial dari variabel lingkungan. Sebelum menjalankan kode ini,
    # pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    
    # Tentukan titik akhir untuk wilayah tempat bucket Anda berada.
    # Misalnya, untuk Tiongkok (Hangzhou), titik akhirnya adalah https://oss-cn-hangzhou.aliyuncs.com.
    endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
    
    # Tentukan wilayah yang sesuai dengan titik akhir, misalnya cn-hangzhou.
    # Parameter ini diperlukan untuk tanda tangan V4.
    region = "cn-hangzhou"
    
    # Ganti "yourBucketName" dengan nama bucket tempat Anda mengonfigurasi aturan.
    bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
    # Tentukan path lengkap objek yang dicerminkan.
    object_key = 'yourObjectKey'
    # Tentukan path lengkap objek sumber.
    source_url = 'yourSourceUrl'
    
    # Dapatkan metadata objek yang dicerminkan.
    oss_object_info = bucket.get_object_meta(object_key)
    
    oss_md5 = oss_object_info.headers.get('etag', '').strip('"')  # ETag biasanya merupakan hash MD5
    oss_crc64 = oss_object_info.headers.get('x-oss-hash-crc64ecma', '')
    
    print(f"OSS MD5: {oss_md5}")
    print(f"OSS CRC64: {oss_crc64}")
    
    # Dapatkan konten objek sumber dan hitung MD5 serta CRC64-nya.
    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)  # Konversi ke string heksadesimal dan format
        print(f"Source CRC64: {source_crc64}")
    
        # Bandingkan nilai MD5.
        if oss_md5 == source_md5:
            print("Checksum MD5 identik.")
        else:
            print("Checksum MD5 tidak cocok.")
    
        # Bandingkan nilai CRC64.
        if oss_crc64.upper() == source_crc64:
            print("Checksum CRC64 identik.")
        else:
            print("Checksum CRC64 tidak cocok.")
    else:
        print(f"Gagal mengambil file sumber. Kode Status HTTP: {response.status_code}")
        
    • Jika checksum MD5 atau CRC64 identik, konten kedua objek tersebut sama. Dalam hal ini, ukuran keduanya juga harus identik.

    • Jika checksum MD5 atau CRC64 tidak cocok, konten kedua objek tersebut berbeda. Lanjutkan ke langkah berikutnya untuk memeriksa header permintaan khusus.

  3. Periksa header permintaan khusus.

    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 xxx
    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
    • Periksa apakah permintaan pengembalian ke sumber berisi header permintaan HTTP khusus, seperti Accept-Encoding: gzip, deflate, br. Header ini menunjukkan bahwa klien dapat menerima data terkompresi.

    • Jika permintaan pengembalian ke sumber menggunakan kompresi HTTP dan objek yang diminta memenuhi kriteria kompresi, ukuran kedua objek tersebut akan berbeda.

    • Jika header Accept-Encoding ada, jangan teruskan header tersebut.

      • Jika Anda telah mengonfigurasi aturan untuk meneruskan semua header HTTP, tambahkan accept-encoding ke daftar header yang dilarang.

      • Jika Anda telah mengonfigurasi aturan untuk meneruskan header HTTP tertentu, pastikan bahwa accept-encoding tidak termasuk dalam daftar header yang ditentukan.

        Pilih Transmit Specific HTTP Headers dan tambahkan content-type di bidang input parameter.

Atasi kegagalan pengembalian ke sumber

Jika Anda mengalami kegagalan pengambilan origin (seperti error 424 MirrorFailed), Anda dapat mengatasi masalah tersebut dengan mengikuti langkah-langkah di bawah ini.

  1. Periksa keterjangkauan server origin.

    # Ganti URL dengan alamat server origin dan path file aktual Anda
    curl -I "https://www.example.com/images/test.jpg"
  2. Periksa resolusi DNS.

    # Ganti nama domain dengan nama domain origin aktual Anda
    nslookup www.example.com
  3. Periksa sertifikat HTTPS (jika server origin menggunakan HTTPS).

    # Ganti nama domain dengan nama domain origin aktual Anda
    openssl s_client -connect www.example.com:443 -servername www.example.com
  4. Analisis masalah dengan menggunakan fitur real-time log query OSS.

Tidak ada objek yang dicerminkan dibuat

Permintaan HEAD klien hanya mengambil metadata objek, seperti ukuran dan jenis, tanpa mengunduh kontennya. Oleh karena itu, permintaan HEAD tidak memicu aturan pengembalian ke sumber berbasis mirroring untuk mengambil objek dari server origin dan menulisnya ke bucket OSS.

Kode status tak terduga dari pengembalian ke sumber

Saat permintaan memicu pengembalian ke sumber berbasis mirroring, jika server origin mengembalikan kode status selain 404, 200, atau 206, analisis respons server origin.

  • Origin adalah OSS: Periksa item konfigurasi berikut.

    • Larang penerusan header HTTP tertentu: Larang penerusan header host untuk menghindari pengungkapan informasi server origin dan memastikan permintaan pengembalian ke sumber diproses sebagaimana mestinya. Jika Anda tidak melarang penerusan header host, permintaan pengembalian ke sumber akan meneruskan nilai host bucket target ke server origin. Karena nilai host setiap bucket unik, jika host yang diminta tidak cocok dengan host aktual origin, server origin mengembalikan error 403. OSS kemudian mengembalikan error 424 ke klien.

    • Pengembalian ke sumber untuk bucket OSS pribadi: Jika izin tidak dikonfigurasi, periksa apakah ACL bucket target dan objeknya diatur ke baca-publik. Jika izin dikonfigurasi, periksa apakah kebijakan otorisasi role untuk pengembalian ke sumber berbasis mirroring telah berubah, sehingga menyebabkan izin tidak mencukupi. Role default untuk pengembalian ke sumber berbasis mirroring adalah AliyunOSSMirrorDefaultRole, dan kebijakan sistem defaultnya adalah AliyunOSSReadOnlyAccess.

  • Origin bukan OSS: Analisis log sisi server dan periksa konfigurasi Indikasi Nama Server (SNI), parameter pengembalian ke sumber, dan penerusan header untuk mengidentifikasi penyebab spesifik error server origin. Server origin mungkin mengembalikan kode status seperti 401 (Unauthorized), 403 (Forbidden), atau 5xx (Server Internal Error).

Urutan pencocokan aturan pengembalian ke sumber

Aturan dicocokkan berdasarkan nomor aturan (RuleNumber) dalam urutan naik. Setelah aturan pertama yang memenuhi kondisi dicocokkan, aturan tersebut segera dieksekusi dan aturan berikutnya tidak dicocokkan.

Ambil dari VPC atau IP internal

Tidak. Server origin harus memiliki alamat yang dapat diakses publik. Untuk mengakses layanan di VPC, ekspos ke internet publik menggunakan Gateway NAT atau instance SLB yang menghadap internet.

Objek OSS tidak diperbarui setelah sumber diperbarui

Pengembalian ke sumber berbasis mirroring adalah mekanisme tarik satu kali dan tidak secara otomatis menyinkronkan pembaruan dari server origin. Untuk mengambil objek yang diperbarui, Anda harus menghapus objek yang dicerminkan dari OSS secara manual atau menggunakan strategi pengendalian versi nama objek.