全部产品
Search
文档中心

Object Storage Service:Pengembalian ke sumber berbasis mirroring

更新时间:Nov 05, 2025

Untuk mencegah gangguan layanan akibat migrasi data yang tidak lengkap, Anda dapat mengonfigurasi pengembalian ke sumber berbasis mirroring saat memindahkan bisnis Anda dari server asal yang dikelola sendiri atau layanan penyimpanan cloud pihak ketiga ke Alibaba Cloud Object Storage Service (OSS). Saat fitur ini dikonfigurasi, jika pengguna meminta objek yang tidak ada di OSS, OSS secara otomatis mengambil objek tersebut dari server asal yang ditentukan. OSS kemudian mengembalikan objek tersebut kepada pengguna dan menyimpannya di bucket. Fitur ini memastikan akses tanpa gangguan ke semua data selama migrasi dan memberikan transisi bisnis yang mulus.

Cara kerjanya

Inti dari fitur pengembalian ke sumber berbasis mirroring adalah proxy sisi server. Ketika klien mengirim permintaan GET untuk objek yang tidak ada di OSS, jika permintaan memicu aturan back-to-origin, seperti awalan objek yang cocok dan kesalahan HTTP 404, server OSS secara otomatis mengirim permintaan HTTP ke server asal yang ditentukan untuk mengambil objek tersebut. Jika server asal mengembalikan kode status 200, OSS mengembalikan konten objek ke klien dan menyimpan objek tersebut di bucket OSS. Jika server asal mengembalikan kode status 404 atau kode status kesalahan lainnya, OSS mengembalikan pesan kesalahan yang sesuai ke klien. Dalam proses ini, OSS bertindak sebagai proxy untuk memungkinkan migrasi sesuai permintaan dan caching satu kali objek. Perhatikan bahwa setelah objek disimpan di OSS, OSS tidak secara otomatis menyinkronkan pembaruan meskipun objek sumber di server asal diperbarui.

Ambil file yang hilang dari situs web tertentu

Inilah skenario paling dasar untuk pengembalian ke sumber berbasis mirroring. Ketika pengguna meminta objek yang tidak ada di OSS, sistem secara otomatis mengambil objek tersebut dari server asal yang ditentukan dan menyimpannya di OSS. Contoh berikut menunjukkan cara mengonfigurasi fitur ini untuk mengambil objek yang hilang dari situs web tertentu. Ketika objek yang tidak ada di direktori examplefolder/ dari examplebucket diakses, OSS secara otomatis mengambil objek tersebut dari https://example.com/.

Langkah 1: Konfigurasikan aturan pengembalian ke sumber berbasis mirroring

  1. Buka halaman Buckets dan klik nama bucket target.

  2. Di panel navigasi di 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. Pertahankan nilai default untuk parameter yang tidak disebutkan.

    Parameter

    Konfigurasi

    Origin Fetch Type

    Pilih Mirror.

    Origin Fetch Condition

    Pilih Filename Prefix dan masukkan examplefolder/.

    Origin URL

    Di kolom pertama (Protokol), pilih https. Di kolom kedua (Nama Domain), masukkan example.com. Biarkan kolom ketiga (Awalan Jalur) kosong. Awalan jalur ditambahkan ke nama domain untuk membentuk bagian jalur dari 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 examplebucket, OSS mengirim permintaan ke https://example.com/examplefolder/example.txt untuk objek tersebut.

  3. Setelah mengambil objek, OSS mengubah namanya menjadi examplefolder/example.txt, menyimpannya di examplebucket, dan mengembalikan objek tersebut kepada peminta.

Ganti direktori dan verifikasi integritas file selama pengambilan asal

Dalam beberapa skenario, struktur direktori di OSS berbeda dari struktur di server asal. Anda juga mungkin perlu memastikan integritas objek yang diambil dari server asal. Skenario ini menunjukkan cara memetakan direktori dan menggunakan validasi MD5 untuk memastikan transfer objek yang andal selama pengambilan asal:

  • Ketika peminta mengakses objek yang tidak ada di direktori examplefolder dari bucket-01 di wilayah China (Hangzhou), objek tersebut dapat diambil dari direktori destfolder dari situs https://example.com.

  • Hash MD5 dari objek yang diambil harus diverifikasi. Objek dengan hash MD5 yang tidak cocok tidak disimpan di bucket-01.

Langkah 1: Konfigurasikan Aturan Pengembalian ke Sumber Berbasis Mirroring

  1. Buka halaman Buckets dan klik nama bucket target.

  2. Di panel navigasi di 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 yang dijelaskan dalam tabel berikut. Pertahankan konfigurasi default untuk parameter lainnya.

    Parameter

    Konfigurasi

    Origin Fetch Type

    Pilih Mirror.

    Origin Fetch Condition

    Pilih Filename Prefix dan atur ke examplefolder/.

    Replace Or Truncate Prefix

    Pilih Enable Prefix Replacement Or Truncation dan atur ke destfolder/.

    Catatan

    Opsi ini hanya muncul setelah Anda mengatur Filename Prefix di bagian Kondisi Pengambilan Asal.

    Origin URL

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

    Check MD5

    Pilih Enable MD5 Check. Ketika respons terhadap permintaan back-to-origin berisi bidang Content-MD5, OSS memeriksa apakah hash MD5 dari file yang diambil cocok dengan nilai bidang Content-MD5.

    • Cocok: Klien mendapatkan file, dan OSS menyimpan file yang diambil.

    • Tidak Cocok: Karena menghitung hash MD5 memerlukan data file lengkap dan file sudah dilewatkan ke klien, klien tetap bisa mendapatkan file, tetapi OSS tidak menyimpannya.

  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-01, OSS mengirim permintaan ke https://example.com/destfolder/example.txt untuk objek tersebut.

  3. Setelah mengambil objek, OSS melakukan operasi berikut:

    • Jika respons back-to-origin berisi bidang Content-MD5, OSS menghitung hash MD5 dari objek yang diambil dan membandingkannya dengan nilai bidang Content-MD5. Jika hash MD5 cocok, OSS mengubah nama objek menjadi examplefolder/example.txt, menyimpannya di bucket-01, dan mengembalikan objek tersebut kepada peminta. Jika hash MD5 tidak cocok, OSS mengembalikan objek kepada pengguna tetapi tidak menyimpannya di bucket-01.

    • Jika respons back-to-origin tidak berisi bidang Content-MD5, OSS mengubah nama objek menjadi examplefolder/example.txt, menyimpannya di bucket-01, dan mengembalikan objek tersebut kepada peminta.

Ambil dari situs yang berbeda berdasarkan direktori yang berbeda

Jika bisnis Anda melibatkan beberapa server asal, Anda dapat merutekan permintaan ke server asal yang berbeda berdasarkan jalur direktori yang diminta. Skenario ini cocok untuk migrasi data dari beberapa server asal atau arsitektur penyimpanan terdistribusi. Sebagai contoh, Anda memiliki dua server asal dengan struktur direktori yang sama: Server Asal A (https://example.com) dan Server Asal B (https://example.org). Anda perlu mengimplementasikan skenario berikut:

  • Ketika peminta mengakses objek yang tidak ada di direktori bucket-02/dir1 di wilayah China (Beijing), objek tersebut diambil dari direktori example1 dari situs https://example.com.

  • Ketika peminta mengakses objek yang tidak ada di direktori bucket-02/dir2, objek tersebut diambil dari direktori example2 dari situs https://example.org.

  • Tergantung pada apakah kebijakan pengalihan diatur untuk Server Asal A dan Server Asal B, OSS memutuskan apakah akan meminta objek dari alamat yang ditentukan dalam pengalihan.

Langkah 1: Konfigurasikan Aturan Pengembalian ke Sumber Berbasis Mirroring

  1. Buka halaman Buckets dan klik nama bucket target.

  2. Di panel navigasi di 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 yang dijelaskan di bawah ini. Pertahankan konfigurasi default untuk parameter lainnya.

    • Aturan 1

      Parameter

      Konfigurasi

      Origin Fetch Type

      Pilih Mirror.

      Origin Fetch Condition

      Pilih Filename Prefix dan atur ke dir1/.

      Replace Or Truncate Prefix

      Pilih Enable Prefix Replacement Or Truncation dan atur ke example1/.

      Catatan

      Opsi ini hanya muncul setelah Anda mengatur Filename Prefix di bagian Kondisi Pengambilan Asal.

      Origin URL

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

      3xx Response Policy

      Pilih Follow Origin Server Redirects.

      Catatan

      Jika Follow Origin Server Redirects tidak dipilih, OSS langsung mengembalikan alamat yang ditentukan oleh aturan pengalihan server asal kepada peminta.

    • Aturan 2

      Parameter

      Konfigurasi

      Origin Fetch Type

      Pilih Mirror.

      Origin Fetch Condition

      Pilih Filename Prefix dan atur ke dir2/.

      Replace Or Truncate Prefix

      Pilih Enable Prefix Replacement Or Truncation dan atur ke example2/.

      Catatan

      Opsi ini hanya muncul setelah Anda mengatur Filename Prefix di bagian Kondisi Pengambilan Asal.

      Origin URL

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

      3xx Response Policy

      Pilih Follow Origin Server Redirects.

  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 dari bucket-02, OSS mengirim permintaan ke https://example.com/example1/example.txt untuk objek tersebut.

    • Jika Server Asal A memiliki aturan pengalihan untuk example1/example.txt, OSS mengirim permintaan baru ke alamat yang ditentukan dalam aturan pengalihan. Setelah mengambil objek, OSS mengubah namanya menjadi dir1/example1/example.txt, menyimpannya di bucket-02, dan mengembalikannya kepada peminta.

    • Jika Server Asal A tidak memiliki aturan pengalihan untuk example1/example.txt, OSS mengambil objek tersebut, mengubah namanya menjadi dir1/example1/example.txt, menyimpannya di bucket-02, dan mengembalikannya kepada peminta.

  3. Jika peminta mengakses https://bucket-02.oss-cn-beijing.aliyuncs.com/dir2/example.txt, objek yang diambil oleh aturan pengembalian ke sumber berbasis mirroring disimpan di direktori dir2/example2 dari bucket-02.

Ambil dari bucket pribadi dan lewatkan parameter yang ditentukan

Ketika server asal adalah bucket OSS pribadi, Anda perlu mengonfigurasi izin akses yang diperlukan. Anda mungkin juga perlu melewatkan parameter tertentu dari permintaan klien ke server asal. Skenario ini menunjukkan cara mengonfigurasi pengembalian ke sumber berbasis mirroring untuk server asal OSS pribadi dan melewatkan parameter. Sebagai contoh, Anda memiliki dua bucket di wilayah China (Shanghai): bucket-03 (baca-publik) dan bucket-04 (pribadi). Anda perlu mengimplementasikan skenario berikut:

  • Ketika peminta mengakses objek yang tidak ada di direktori examplefolder dalam direktori root dari bucket-03, objek tersebut diambil dari direktori examplefolder dari bucket-04.

  • String kueri dalam URL permintaan dilewatkan ke server asal.

  • Header HTTP header1, header2, dan header3 dalam URL permintaan dilewatkan ke server asal.

Langkah 1: Konfigurasikan Aturan Pengembalian ke Sumber Berbasis Mirroring

  1. Buka halaman Buckets dan klik nama bucket target.

  2. Di panel navigasi di 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 yang dijelaskan dalam tabel berikut. Pertahankan konfigurasi default untuk parameter lainnya.

    Parameter

    Konfigurasi

    Origin Fetch Type

    Pilih Mirror.

    Origin Fetch Condition

    Pilih Filename Prefix dan atur ke examplefolder/.

    Origin Server Type

    Pilih Private OSS Bucket For Origin Fetch dan pilih bucket-04 dari daftar drop-down Origin Bucket.

    Setelah Anda mengonfigurasi opsi ini, ketika pengguna mengakses objek yang tidak ada, OSS menggunakan peran default AliyunOSSMirrorDefaultRole untuk mengambil data dari bucket asal pribadi yang ditentukan. Proses pengambilan data memerlukan izin AliyunOSSReadOnlyAccess. Izin ini memastikan bahwa OSS hanya dapat mengakses data server asal dalam mode baca-saja, mencegah modifikasi atau penghapusan data.

    Ketika Pengguna Resource Access Management (RAM) mengonfigurasi pengembalian ke sumber berbasis mirroring untuk bucket OSS pribadi, Pengguna RAM harus memiliki izin ram:GetRole. Izin ini digunakan untuk memeriksa apakah peran AliyunOSSMirrorDefaultRole ada.

    • Jika peran tersebut ada, peran tersebut digunakan secara langsung.

    • Jika peran tersebut tidak ada, kami sarankan agar Akun Alibaba Cloud yang terkait dengan Pengguna RAM membuat peran AliyunOSSMirrorDefaultRole terlebih dahulu dan memberikan izin AliyunOSSReadOnlyAccess kepada peran tersebut. Ini menghindari pemberian izin berisiko tinggi kepada Pengguna RAM, seperti membuat peran (ram:CreateRole) dan memberikan izin kepada peran (ram:AttachPolicyToRole). Setelah otorisasi selesai, Pengguna RAM dapat langsung menggunakan kembali peran yang telah dibuat, yang mengurangi risiko konfigurasi izin.

    Origin URL

    Atur kolom pertama ke https dan biarkan yang lain kosong.

    Origin Fetch Parameters

    Pilih Pass Query String.

    OSS melewatkan string kueri dari permintaan URL ke server asal.

    Set HTTP Header Pass-through Rules

    Pilih Pass Specified HTTP Header Parameters dan tambahkan header HTTP header1, header2, dan header3. Aturan back-to-origin tidak mendukung melewatkan beberapa header HTTP standar, seperti authorization, authorization2, range, dan content-length, date, atau header HTTP yang dimulai dengan x-oss-, oss-, atau x-drs-.

    Penting

    Saat mengambil dari bucket pribadi, jangan pilih untuk melewatkan semua parameter header HTTP. Jika tidak, pengambilan asal akan 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-03, OSS mengirim permintaan ke https://bucket-04.oss-cn-shanghai.aliyuncs.com/examplefolder/example.png?caller=lucas&production=oss untuk objek tersebut.

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

  4. OSS mengubah nama objek yang diambil menjadi examplefolder/example.png dan menyimpannya di bucket-03.

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

Penggunaan dalam lingkungan produksi

Migrasi data tanpa gangguan

Untuk informasi lebih lanjut tentang solusi migrasi ini, lihat Migrasikan Layanan ke Alibaba Cloud OSS secara Mulus menggunakan Pengembalian ke Sumber Berbasis Mirroring.

Segarkan objek yang diambil dari server asal

Karena pengembalian ke sumber berbasis mirroring adalah mekanisme caching satu kali, OSS tidak secara otomatis menyegarkan atau mengambil ulang objek meskipun objek sumber di server asal diperbarui. Anda dapat menggunakan metode berikut untuk menyegarkan objek yang sudah disimpan di OSS.

  • Penghapusan Manual: Hapus objek di OSS menggunakan konsol atau API. Saat objek diakses lagi, aturan back-to-origin dipicu kembali.

  • Aturan Siklus Hidup: Konfigurasikan kebijakan kedaluwarsa untuk objek yang diambil dari server asal sehingga mereka secara otomatis dihapus setelah periode tetap. Ini mencapai penyegaran berkala.

  • Pengendalian Versi Nama File: Saat memperbarui objek di server asal, gunakan nama baru, seperti style.v2.css. Ini secara fundamental menghindari masalah caching dan merupakan praktik yang direkomendasikan.

Pencegahan risiko dan toleransi kesalahan

  • Beban Server Asal: Pastikan server asal Anda memiliki bandwidth dan kapasitas pemrosesan yang cukup untuk menangani permintaan back-to-origin. Selama fase awal migrasi, volume permintaan back-to-origin mungkin besar. Kami sarankan Anda memantau beban server asal dan melakukan pra-pengambilan data selama jam-jam sepi.

  • Pengendalian Biaya: Untuk mencegah biaya yang tidak terduga tinggi, kami sarankan Anda menyiapkan peringatan biaya di Pusat Manajemen Alibaba Cloud untuk memantau volume permintaan back-to-origin.

  • Konfigurasi Keamanan: Pastikan OSS dapat mengakses server asal. Jika URL asal menggunakan protokol HTTPS, pastikan sertifikat server asal dikeluarkan oleh otoritas sertifikat tepercaya (CA), nama domain sesuai, dan sertifikat belum kedaluwarsa.

  • Kueri Log: Anda dapat menggunakan fitur kueri log waktu nyata untuk melihat log back-to-origin. User-Agent untuk permintaan back-to-origin berisi string aliyun-oss-mirror.

Kuota dan batasan

  • Jumlah dan Urutan Aturan: Anda dapat mengonfigurasi hingga 20 aturan back-to-origin untuk setiap bucket. Aturan dicocokkan dalam urutan menaik dari RuleNumber mereka. Ketika sebuah aturan cocok, aturan tersebut dieksekusi, dan aturan berikutnya diabaikan. Anda dapat menyesuaikan prioritas pencocokan menggunakan operasi Move Up atau Move Down di sebelah kanan aturan.

  • QPS dan Lalu Lintas:

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

    • Wilayah di Luar Daratan Tiongkok: Total QPS default adalah 1.000, dan total bandwidth adalah 1 Gbit/s.

    • Batas ini adalah kapasitas pengembalian ke sumber berbasis mirroring total untuk semua bucket di bawah satu Akun Alibaba Cloud di wilayah yang sesuai. Jika batas dilampaui, permintaan akan dibatasi, dan kesalahan 503 dikembalikan. Jika Anda memerlukan kuota yang lebih tinggi, hubungi Dukungan Teknis.

  • Alamat Server Asal: Alamat tersebut harus berupa nama domain atau alamat IP yang dapat diakses melalui Internet dan mematuhi standar pengkodean RFC 3986. Alamat jaringan internal tidak didukung.

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

FAQ

Mengapa ukuran file yang diambil dari server asal berbeda dari ukuran file sumber?

Jika ukuran objek yang diambil dari server asal berbeda dari ukuran objek sumber, lakukan langkah-langkah pemecahan masalah berikut.

  1. Periksa timestamp Last-Modified dari objek yang diambil dan objek sumber.

    import oss2
    import requests
    from datetime import datetime
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    
    # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    
    # Tentukan Endpoint untuk wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
    endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
    
    # Tentukan informasi wilayah yang sesuai dengan Endpoint, misalnya, cn-hangzhou. Perhatikan bahwa parameter ini diperlukan untuk tanda tangan V4.
    region = "cn-hangzhou"
    
    # Atur yourBucketName ke nama bucket tempat Anda mengonfigurasi aturan pengembalian ke sumber berbasis mirroring.
    bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
    # Tentukan jalur lengkap file objek.
    object_key = 'yourObjectKey'
    # Tentukan jalur lengkap file sumber.
    source_url = 'yourSourceUrl'
    
    # Dapatkan timestamp Last-Modified dari file yang diambil.
    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 timestamp Last-Modified dari file sumber.
    response = requests.head(source_url)
    source_last_modified = response.headers.get('last-modified')
    print(f"Source Last-Modified: {source_last_modified}")
    
    # Ubah string timestamp menjadi 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("File sumber telah diperbarui.")
    elif oss_time > source_time:
        print("File yang diambil lebih baru.")
    else:
        print("Timestamp kedua file sama.")
    • Jika timestamp Last-Modified dari objek sumber lebih baru dari timestamp Last-Modified dari objek yang diambil, objek sumber mungkin telah diperbarui setelah objek tersebut diambil.

      Catatan

      Saat OSS mengambil objek dari server asal dan menulisnya ke bucket tujuan, OSS tidak mempertahankan timestamp Last-Modified dari objek sumber (waktu terakhir objek sumber dimodifikasi). Sebaliknya, OSS menyetel timestamp Last-Modified dari objek yang diambil ke waktu objek tersebut dibuat atau diperbarui di OSS melalui fitur pengembalian ke sumber berbasis mirroring.

    • Jika timestamp Last-Modified dari objek sumber lebih lama atau sama dengan timestamp Last-Modified dari objek yang diambil, objek sumber belum diperbarui sejak objek yang diambil dihasilkan. Lanjutkan ke langkah berikutnya untuk memeriksa nilai MD5 atau pemeriksaan redundansi siklik 64-bit (CRC-64) mereka.

  2. Bandingkan nilai MD5 atau CRC-64 dari objek yang diambil dan objek sumber.

    # -*- coding: utf-8 -*-
    import oss2
    import hashlib
    import requests
    # Untuk membandingkan CRC-64, karena pustaka standar Python tidak mendukung CRC-64, Anda dapat menggunakan pustaka pihak ketiga seperti crcmod.
    # Instal crcmod: pip install crcmod
    import crcmod
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    
    # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    
    # Tentukan Endpoint untuk wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
    endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
    
    # Tentukan informasi wilayah yang sesuai dengan Endpoint, misalnya, cn-hangzhou. Perhatikan bahwa parameter ini diperlukan untuk tanda tangan V4.
    region = "cn-hangzhou"
    
    # Atur yourBucketName ke nama bucket tempat Anda mengonfigurasi aturan pengembalian ke sumber berbasis mirroring.
    bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
    # Tentukan jalur lengkap file objek.
    object_key = 'yourObjectKey'
    # Tentukan jalur lengkap file sumber.
    source_url = 'yourSourceUrl'
    
    # Dapatkan metadata dari file yang diambil.
    oss_object_info = bucket.get_object_meta(object_key)
    
    oss_md5 = oss_object_info.headers.get('etag', '').strip('"')  # ETag biasanya adalah 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 file sumber dan hitung MD5 dan CRC-64-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)  # Ubah ke string heksadesimal dan format
        print(f"Source CRC64: {source_crc64}")
    
        # Bandingkan nilai MD5.
        if oss_md5 == source_md5:
            print("Nilai MD5 cocok.")
        else:
            print("Nilai MD5 tidak cocok.")
    
        # Bandingkan nilai CRC-64.
        if oss_crc64.upper() == source_crc64:
            print("Nilai CRC-64 cocok.")
        else:
            print("Nilai CRC-64 tidak cocok.")
    else:
        print(f"Gagal mengambil file sumber. Kode Status HTTP: {response.status_code}")
        
    • Jika nilai MD5 atau CRC-64 mereka cocok, konten kedua objek sama. Dalam hal ini, ukuran kedua objek tersebut harus sama.

    • Jika nilai MD5 atau CRC-64 mereka tidak cocok, konten kedua objek berbeda. Lanjutkan ke langkah berikutnya untuk memeriksa header permintaan khusus.

  3. Periksa header permintaan khusus.

    screenshot_2025-02-18_17-04-03

    • Periksa apakah permintaan pengembalian ke sumber berbasis mirroring berisi header permintaan HTTP khusus, seperti Accept-Encoding: gzip, deflate, br. Header ini menunjukkan bahwa klien dapat menerima format data terkompresi.

    • Jika permintaan pengembalian ke sumber berbasis mirroring menggunakan logika kompresi HTTP dan objek yang diminta memenuhi kondisi kompresi, ukuran kedua objek tersebut juga akan berbeda.

    • Jika header Accept-Encoding ada, Anda harus melarangnya untuk dilewatkan.

      • Jika Anda mengonfigurasi aturan untuk melewatkan semua header HTTP, Anda harus menambahkan `accept-encoding` ke daftar header HTTP yang dilarang.

        p917892

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

        screenshot_2025-02-19_14-30-45

Bagaimana cara saya memecahkan masalah kegagalan pengambilan asal?

Jika pengambilan asal gagal dan mengembalikan kesalahan seperti 424 MirrorFailed, lakukan langkah-langkah pemecahan masalah berikut.

  1. Periksa keterjangkauan server asal.

    # Ganti URL dengan alamat server asal dan jalur file Anda yang sebenarnya
    curl -I "https://www.example.com/images/test.jpg"
  2. Periksa resolusi DNS.

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

    # Ganti nama domain dengan nama domain server asal Anda yang sebenarnya
    openssl s_client -connect www.example.com:443 -servername www.example.com
  4. Analisis masalah menggunakan fitur kueri log waktu nyata OSS.

Mengapa file tidak dibuat melalui pengembalian ke sumber berbasis mirroring?

Klien mengirim permintaan HEAD untuk mengambil metadata objek, seperti ukuran dan jenisnya, tanpa mengunduh konten objek sebenarnya. Permintaan HEAD tidak memicu aturan pengembalian ke sumber berbasis mirroring. Oleh karena itu, objek tidak diambil dari server asal atau ditulis ke bucket OSS tujuan.

Mengapa permintaan pengembalian ke sumber berbasis mirroring mengembalikan kode status yang tidak terduga?

Jika permintaan back-to-origin dipicu dan server asal mengembalikan kode status selain 404, 200, atau 206, Anda harus menganalisis respons server asal.

  • Server Asal adalah OSS: Periksa item konfigurasi berikut.

    • Larang Header HTTP Tertentu untuk Dilewatkan: Larang header `host` untuk dilewatkan. Ini mencegah paparan informasi server asal dan memastikan bahwa permintaan back-to-origin diproses sesuai harapan. Jika header `host` dilewatkan, permintaan back-to-origin mengirim nilai `host` bucket tujuan ke server asal. Nilai `host` setiap bucket unik. Jika `host` yang diminta tidak cocok dengan `host` aktual server asal, server asal mengembalikan kesalahan 403. OSS kemudian mengembalikan kesalahan 424 kepada klien, yang menunjukkan bahwa operasi gagal karena server asal tidak dapat memproses permintaan.

      screenshot_2025-02-19_14-31-42

    • Private OSS Bucket untuk Pengambilan Asal: Jika tidak ada izin yang dikonfigurasi, periksa apakah ACL bucket tujuan dan objeknya diatur ke public-read. Jika izin dikonfigurasi, periksa apakah kebijakan otorisasi peran yang digunakan untuk pengembalian ke sumber berbasis mirroring telah diubah, yang dapat mengakibatkan izin tidak mencukupi. Peran default yang digunakan untuk pengembalian ke sumber berbasis mirroring adalah AliyunOSSMirrorDefaultRole, dan kebijakan sistem defaultnya adalah AliyunOSSReadOnlyAccess.

  • Server Asal Bukan OSS: Periksa log sisi server dan konfigurasi seperti Server Name Indication (SNI), parameter back-to-origin, dan lewatkan header untuk menganalisis penyebab spesifik dari pengecualian server asal. Server asal mungkin mengembalikan kode status seperti 401 (Unauthorized), 403 (Forbidden), atau 5xx (Kesalahan Internal Server).

Apa urutan pencocokan aturan back-to-origin?

Aturan dicocokkan dalam urutan menaik dari nomor aturan mereka (RuleNumber). Ketika aturan pertama yang cocok ditemukan, aturan tersebut dieksekusi, dan proses pencocokan berhenti.

Bisakah saya mengambil dari layanan di VPC atau alamat IP internal?

Tidak. Server asal harus memiliki alamat yang dapat diakses secara publik. Untuk mengakses layanan dalam VPC, Anda dapat mengeksposnya ke Internet menggunakan Gateway NAT atau instance SLB publik.

Setelah file sumber diperbarui, mengapa file di OSS tidak diperbarui?

Pengembalian ke sumber berbasis mirroring adalah mekanisme tarik satu kali dan tidak secara otomatis menyinkronkan pembaruan dari server asal. Anda harus secara manual menghapus objek yang diambil di OSS atau menggunakan strategi pengendalian versi nama file untuk mengambil objek baru.