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
Buka halaman Buckets dan klik nama bucket target.
Di panel navigasi di sebelah kiri, pilih .
Di halaman Mirroring-based Back-to-origin, klik Create Rule.
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), masukkanexample.com. Biarkan kolom ketiga (Awalan Jalur) kosong. Awalan jalur ditambahkan ke nama domain untuk membentuk bagian jalur dari URL asal.Klik OK.
Langkah 2: Verifikasi aturan
Akses
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/examplefolder/example.txt.Jika objek
examplefolder/example.txttidak ada diexamplebucket, OSS mengirim permintaan kehttps://example.com/examplefolder/example.txtuntuk objek tersebut.Setelah mengambil objek, OSS mengubah namanya menjadi
examplefolder/example.txt, menyimpannya diexamplebucket, 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
examplefolderdaribucket-01di wilayah China (Hangzhou), objek tersebut dapat diambil dari direktoridestfolderdari situshttps://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
Buka halaman Buckets dan klik nama bucket target.
Di panel navigasi di sebelah kiri, pilih .
Di halaman Mirroring-based Back-to-origin, klik Create Rule.
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/.
CatatanOpsi 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.
Klik OK.
Langkah 2: Verifikasi aturan
Akses
https://bucket-01.oss-cn-hangzhou.aliyuncs.com/examplefolder/example.txt.Jika objek
examplefolder/example.txttidak ada dibucket-01, OSS mengirim permintaan kehttps://example.com/destfolder/example.txtuntuk objek tersebut.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 dibucket-01, dan mengembalikan objek tersebut kepada peminta. Jika hash MD5 tidak cocok, OSS mengembalikan objek kepada pengguna tetapi tidak menyimpannya dibucket-01.Jika respons back-to-origin tidak berisi bidang Content-MD5, OSS mengubah nama objek menjadi
examplefolder/example.txt, menyimpannya dibucket-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/dir1di wilayah China (Beijing), objek tersebut diambil dari direktoriexample1dari situshttps://example.com.Ketika peminta mengakses objek yang tidak ada di direktori
bucket-02/dir2, objek tersebut diambil dari direktoriexample2dari situshttps://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
Buka halaman Buckets dan klik nama bucket target.
Di panel navigasi di sebelah kiri, pilih .
Di halaman Mirroring-based Back-to-origin, klik Create Rule.
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/.
CatatanOpsi 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.
CatatanJika 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/.
CatatanOpsi 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.
Klik OK.
Langkah 2: Verifikasi Aturan
Akses
https://bucket-02.oss-cn-beijing.aliyuncs.com/dir1/example.txt.Jika objek
example.txttidak ada di direktoridir1daribucket-02, OSS mengirim permintaan kehttps://example.com/example1/example.txtuntuk 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 menjadidir1/example1/example.txt, menyimpannya dibucket-02, dan mengembalikannya kepada peminta.Jika Server Asal A tidak memiliki aturan pengalihan untuk
example1/example.txt, OSS mengambil objek tersebut, mengubah namanya menjadidir1/example1/example.txt, menyimpannya dibucket-02, dan mengembalikannya kepada peminta.
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 direktoridir2/example2daribucket-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
examplefolderdalam direktori root daribucket-03, objek tersebut diambil dari direktoriexamplefolderdaribucket-04.String kueri dalam URL permintaan dilewatkan ke server asal.
Header HTTP
header1,header2, danheader3dalam URL permintaan dilewatkan ke server asal.
Langkah 1: Konfigurasikan Aturan Pengembalian ke Sumber Berbasis Mirroring
Buka halaman Buckets dan klik nama bucket target.
Di panel navigasi di sebelah kiri, pilih .
Di halaman Mirroring-based Back-to-origin, klik Create Rule.
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-04dari daftar drop-down Origin Bucket.Setelah Anda mengonfigurasi opsi ini, ketika pengguna mengakses objek yang tidak ada, OSS menggunakan peran default
AliyunOSSMirrorDefaultRoleuntuk mengambil data dari bucket asal pribadi yang ditentukan. Proses pengambilan data memerlukan izinAliyunOSSReadOnlyAccess. 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 peranAliyunOSSMirrorDefaultRoleada.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
AliyunOSSMirrorDefaultRoleterlebih dahulu dan memberikan izinAliyunOSSReadOnlyAccesskepada 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, danheader3. Aturan back-to-origin tidak mendukung melewatkan beberapa header HTTP standar, sepertiauthorization,authorization2,range, dancontent-length,date, atau header HTTP yang dimulai denganx-oss-,oss-, ataux-drs-.PentingSaat mengambil dari bucket pribadi, jangan pilih untuk melewatkan semua parameter header HTTP. Jika tidak, pengambilan asal akan gagal.
Klik OK.
Langkah 2: Verifikasi Aturan
Akses
https://bucket-03.oss-cn-shanghai.aliyuncs.com/examplefolder/example.png?caller=lucas&production=oss.Jika objek
examplefolder/example.pngtidak ada dibucket-03, OSS mengirim permintaan kehttps://bucket-04.oss-cn-shanghai.aliyuncs.com/examplefolder/example.png?caller=lucas&production=ossuntuk objek tersebut.bucket-04mengembalikan objekexample.pngke OSS berdasarkan parameter?caller=lucas&production=ossyang dilewatkan.OSS mengubah nama objek yang diambil menjadi
examplefolder/example.pngdan menyimpannya dibucket-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.
Periksa timestamp
Last-Modifieddari 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-Modifieddari objek sumber lebih baru dari timestampLast-Modifieddari objek yang diambil, objek sumber mungkin telah diperbarui setelah objek tersebut diambil.CatatanSaat OSS mengambil objek dari server asal dan menulisnya ke bucket tujuan, OSS tidak mempertahankan timestamp
Last-Modifieddari objek sumber (waktu terakhir objek sumber dimodifikasi). Sebaliknya, OSS menyetel timestampLast-Modifieddari objek yang diambil ke waktu objek tersebut dibuat atau diperbarui di OSS melalui fitur pengembalian ke sumber berbasis mirroring.Jika timestamp
Last-Modifieddari objek sumber lebih lama atau sama dengan timestampLast-Modifieddari 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.
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.
Periksa header permintaan khusus.

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-Encodingada, 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.

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

Bagaimana cara saya memecahkan masalah kegagalan pengambilan asal?
Jika pengambilan asal gagal dan mengembalikan kesalahan seperti 424 MirrorFailed, lakukan langkah-langkah pemecahan masalah berikut.
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"Periksa resolusi DNS.
# Ganti nama domain dengan nama domain server asal Anda yang sebenarnya nslookup www.example.comPeriksa 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.comAnalisis 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.

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 adalahAliyunOSSReadOnlyAccess.
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.