Tüm Ürünler
Search
Belge Merkezi

Object Storage Service:Mirror back-to-origin

Son Güncelleme:Oct 01, 2026

Bir istemci OSS'de bulunmayan bir nesneyi talep ettiğinde, OSS bu nesneyi belirtilen kaynak sunucunuzdan otomatik olarak alır, istemciye döndürür ve paketinizde depolar.

Nasıl çalışır?

Yansıtabanlı geri kaynağa erişim özelliği bir sunucu tarafı vekil gibi çalışır. Bir istemci, bir OSS paketinde bulunmayan bir nesne için GET isteği gönderdiğinde, OSS bu isteğin bir geri kaynağa erişim kuralını tetikleyip tetiklemediğini (örneğin, nesne adı önekini eşleştirerek HTTP 404 hatası döndürerek) kontrol eder. Bir kural tetiklenirse, OSS nesneyi almak üzere belirtilen kaynak sunucuya bir HTTP isteği gönderir. Kaynak sunucu 200 OK durum kodunu döndürürse, OSS nesneyi istemciye döndürür ve aynı anda pakette depolar. Kaynak sunucu 404 Not Found veya başka bir hata durum kodu döndürürse, OSS ilgili hatayı istemciye iletir. Bu süreçte OSS bir vekil olarak görev yaparak ihtiyaca göre veri geçişi ve tek seferlik önbellekleme sağlar. Bir nesne OSS'ye depolandıktan sonra, kaynak sunucudaki orijinal nesnede değişiklik olsa bile otomatik olarak güncellenmez.

image

Eksik nesneleri bir web sitesinden alın

Bu, yansıtabanlı geri kaynağa erişimi yapılandırmak için en temel senaryodur. Bir istemci OSS'de bulunmayan bir nesneyi talep ettiğinde, OSS bunu belirtilen bir kaynak sunucudan otomatik olarak alır ve pakette depolar. Bu örnekte, istenen nesne examplebucket paketinin examplefolder/ dizininde bulunamadığında nesnelerin https://example.com/ adresinden nasıl alınacağı gösterilmektedir.

Adım 1: Yansıtabanlı geri kaynağa erişim kuralı yapılandırın

  1. Paketler sayfasına gidin ve hedef paketin adını tıklayın.

  2. Sol gezinme bölmesinde Data Management > Mirroring-based Back-to-origin seçeneğini belirleyin.

  3. Mirroring-based Back-to-origin sayfasında Create Rule seçeneğine tıklayın.

  4. Create Rule panelinde parametreleri yapılandırın. Diğer tüm parametreler için varsayılan değerleri kullanın.


    Parameter


    Configuration


    Method


    Image seçeneğini belirleyin.


    Condition


    Object Name Prefix seçeneğini belirleyin ve metin kutusuna examplefolder/ girin.


    Origin URL


    İlk sütunda (Protokol) https seçeneğini belirleyin. İkinci sütunda (Alan Adı) example.com girin. Üçüncü sütunu (Yol Öneki) boş bırakın. Yol öneki, kaynak URL'nin yolunu oluşturmak üzere alan adına eklenir.

  5. OK seçeneğine tıklayın.

Adım 2: Kuralı doğrulayın

  1. https://examplebucket.oss-cn-hangzhou.aliyuncs.com/examplefolder/example.txt adresine erişin.

  2. examplebucket paketinde examplefolder/example.txt nesnesi yoksa, OSS nesneyi https://example.com/examplefolder/example.txt adresinden ister.

  3. OSS, nesneyi aldıktan sonra bunu examplebucket paketinde examplefolder/example.txt olarak kaydeder ve nesneyi istemciye döndürür.

Dizini değiştirin ve bütünlüğü doğrulayın

Bazı senaryolarda OSS paketinizdeki dizin yapısı kaynak sunucunuzdan farklı olabilir. Ayrıca, kaynak sunucudan alınan nesnelerin bütünlüğünü sağlamanız gerekebilir. Bu kullanım durumunda dizinlerin nasıl eşleneceği ve güvenilir veri aktarımı sağlamak için MD5 doğrulamasının nasıl kullanılacağı gösterilmektedir.

  • Bir istemci Çin (Hangzhou) bölgesindeki bucket-01 paketinin examplefolder dizininde bulunmayan bir nesneyi talep ettiğinde, OSS nesneyi https://example.com web sitesinin destfolder dizininden alır.

  • OSS, alınan nesnenin MD5 karma değerini doğrular. MD5 karma değeri eşleşmeyen nesneler bucket-01 paketine kaydedilmez.

Adım 1: Yansıtabanlı geri kaynağa erişim kuralı yapılandırın

  1. Paketler sayfasına gidin ve hedef paketin adını tıklayın.

  2. Sol gezinme bölmesinde Data Management > Mirroring-based Back-to-origin seçeneğini belirleyin.

  3. Mirroring-based Back-to-origin sayfasında Create Rule seçeneğine tıklayın.

  4. Create Rule panelinde aşağıdaki tabloda açıklanan gerekli parametreleri yapılandırın. Diğer parametreler için varsayılan değerleri kullanın.

    Parameter

    Configuration

    Method

    Image seçeneğini belirleyin.

    Condition

    Object Name Prefix seçeneğini belirleyin ve examplefolder/ olarak ayarlayın.

    Replace or Delete File Prefix

    Replace or Delete File Prefix seçeneğini belirleyin ve destfolder/ olarak ayarlayın.

    Not

    Bu seçenek yalnızca geri kaynağa erişim koşulu için Object Name Prefix ayarlandıktan sonra görüntülenir.

    Origin URL

    İlk sütunu https, ikinci sütunu example.com olarak ayarlayın ve üçüncü sütunu boş bırakın.

    MD5 Verification

    Perform MD5 verification seçeneğini belirleyin. Geri kaynağa erişim isteğine verilen yanıt Content-MD5 başlığını içeriyorsa, OSS alınan nesnenin MD5 karma değerinin Content-MD5 başlığının değeriyle eşleşip eşleşmediğini doğrular.

    • Değerler eşleşirse istemci nesneyi alır ve OSS nesneyi kaydeder.

    • Değerler eşleşmezse istemci yine de nesneyi alır ancak OSS nesneyi kaydetmez. Bunun nedeni, MD5 karma değerinin hesaplanması için tam nesne verilerinin gerekmesi ve o sırada nesnenin zaten istemciye akışla gönderilmiş olmasıdır.

  5. OK seçeneğine tıklayın.

Adım 2: Kuralı doğrulayın

  1. https://bucket-01.oss-cn-hangzhou.aliyuncs.com/examplefolder/example.txt adresine erişin.

  2. bucket-01 paketinde examplefolder/example.txt nesnesi yoksa, OSS nesneyi https://example.com/destfolder/example.txt adresinden ister.

  3. OSS, nesneyi aldıktan sonra aşağıdaki işlemleri gerçekleştirir:

    • Geri kaynağa erişim isteğinin yanıtı Content-MD5 başlığını içeriyorsa, OSS alınan nesnenin MD5 karma değerini hesaplar ve bunu Content-MD5 başlığının değeriyle karşılaştırır. Değerler eşleşirse OSS nesneyi bucket-01 paketine examplefolder/example.txt olarak kaydeder ve nesneyi istemciye döndürür. Değerler eşleşmezse OSS nesneyi istemciye döndürür ancak bucket-01 paketine kaydetmez.

    • Geri kaynağa erişim isteğinin yanıtı Content-MD5 başlığını içermiyorsa, OSS nesneyi bucket-01 paketine examplefolder/example.txt olarak kaydeder ve nesneyi istemciye döndürür.

İstekleri dizine göre yönlendirin

Birden fazla kaynak sunucu içeren bir iş yapınız varsa, istekleri istenen nesne yoluna göre farklı sunuculara yönlendirebilirsiniz. Bu senaryo, verileri birden fazla kaynaktan birleştirmek veya dağıtık bir depolama mimarisinden geçiş yapmak için kullanışlıdır. Örneğin, aynı dizin yapısına sahip iki kaynak sunucunuz vardır: Kaynak Sunucu A (https://example.com) ve Kaynak Sunucu B (https://example.org). Aşağıdaki davranışı uygulamak istiyorsunuz:

  • Bir istemci Çin (Pekin) bölgesindeki bucket-02/dir1 dizininde bulunmayan bir nesneyi talep ettiğinde, OSS nesneyi https://example.com web sitesinin example1 dizininden alır.

  • Bir istemci bucket-02/dir2 dizininde bulunmayan bir nesneyi talep ettiğinde, OSS nesneyi https://example.org web sitesinin example2 dizininden alır.

  • Kaynak Sunucu A ve Kaynak Sunucu B'de yeniden yönlendirme ilkelerinin yapılandırılıp yapılandırılmadığına bağlı olarak, OSS nesneyi yeniden yönlendirilen adresten isteyip istemeyeceğine karar verir.

Adım 1: Yansıtabanlı geri kaynağa erişim kuralları yapılandırın

  1. Paketler sayfasına gidin ve hedef paketin adını tıklayın.

  2. Sol gezinme bölmesinde Data Management > Mirroring-based Back-to-origin seçeneğini belirleyin.

  3. Mirroring-based Back-to-origin sayfasında Create Rule seçeneğine tıklayın.

  4. Create Rule panelinde aşağıda açıklandığı gibi iki yansıtabanlı geri kaynağa erişim kuralı yapılandırın. Diğer tüm parametreler için varsayılan değerleri kullanın.

    • Kural 1

      Parameter

      Configuration

      Method

      Image seçeneğini belirleyin.

      Condition

      Object Name Prefix seçeneğini belirleyin ve dir1/ olarak ayarlayın.

      Replace or Delete File Prefix

      Replace or Delete File Prefix seçeneğini belirleyin ve example1/ olarak ayarlayın.

      Not

      Bu seçenek yalnızca geri kaynağa erişim koşulu için Object Name Prefix ayarlandıktan sonra görüntülenir.

      Origin URL

      İlk sütunu https, ikinci sütunu example.com olarak ayarlayın ve üçüncü sütunu boş bırakın.

      3xx Response

      Follow Origin to Redirect Request seçeneğini belirleyin.

      Not

      Follow Origin to Redirect Request seçilmezse, OSS kaynak sunucu tarafından belirtilen yeniden yönlendirme adresini doğrudan istemciye döndürür.

    • Kural 2

      Parameter

      Configuration

      Method

      Image seçeneğini belirleyin.

      Condition

      Object Name Prefix seçeneğini belirleyin ve dir2/ olarak ayarlayın.

      Replace or Delete File Prefix

      Replace or Delete File Prefix seçeneğini belirleyin ve example2/ olarak ayarlayın.

      Not

      Bu seçenek yalnızca geri kaynağa erişim koşulu için Object Name Prefix ayarlandıktan sonra görüntülenir.

      Origin URL

      İlk sütunu https, ikinci sütunu example.org olarak ayarlayın ve üçüncü sütunu boş bırakın.

      3xx Response

      Follow Origin to Redirect Request seçeneğini belirleyin.

  5. OK seçeneğine tıklayın.

Adım 2: Kuralları doğrulayın

  1. https://bucket-02.oss-cn-beijing.aliyuncs.com/dir1/example.txt adresine erişin.

  2. bucket-02 paketinin dir1 dizininde example.txt nesnesi yoksa, OSS nesne için https://example.com/example1/example.txt adresine bir istek gönderir.

    • Kaynak Sunucu A'da example1/example.txt için bir yeniden yönlendirme kuralı varsa, OSS yeniden yönlendirilen adrese yeni bir istek gönderir. Nesneyi aldıktan sonra bunu bucket-02 paketine dir1/example.txt olarak kaydeder ve istemciye döndürür.

    • Kaynak Sunucu A'da example1/example.txt için bir yeniden yönlendirme kuralı yoksa, OSS nesneyi alır, bunu bucket-02 paketine dir1/example.txt olarak kaydeder ve istemciye döndürür.

  3. Bir istemci https://bucket-02.oss-cn-beijing.aliyuncs.com/dir2/example.txt adresini talep ederse, yansıtabanlı geri kaynağa erişim kuralı aracılığıyla alınan nesne bucket-02 paketinde dir2/example.txt olarak depolanır.

Özel bir paketten alın ve parametreleri iletin

Kaynak sunucunuz özel bir OSS paketi olduğunda gerekli erişim izinlerini yapılandırmanız gerekir. Ayrıca, istemci isteğinden belirli parametreleri kaynak sunucuya iletmeniz gerekebilir. Bu kullanım durumunda özel bir OSS paketi için geri kaynağa erişimin nasıl yapılandırılacağı ve parametrelerin nasıl iletileceği gösterilmektedir. Örneğin, Çin (Şanghay) bölgesinde iki paketiniz vardır: bucket-03 (public-read) ve bucket-04 (private). Aşağıdaki davranışı uygulamak istiyorsunuz:

  • Bir istemci bucket-03 paketinin examplefolder dizininde bulunmayan bir nesneyi talep ettiğinde, OSS nesneyi bucket-04 paketinin examplefolder dizininden alır.

  • OSS, istek URL'sindeki sorgu dizesini kaynak sunucuya iletir.

  • OSS, istekten gelen header1, header2 ve header3 HTTP başlıklarını kaynak sunucuya iletir.

Adım 1: Yansıtabanlı geri kaynağa erişim kuralı yapılandırın

  1. Paketler sayfasına gidin ve hedef paketin adını tıklayın.

  2. Sol gezinme bölmesinde Data Management > Mirroring-based Back-to-origin seçeneğini belirleyin.

  3. Mirroring-based Back-to-origin sayfasında Create Rule seçeneğine tıklayın.

  4. Create Rule panelinde aşağıdaki tabloda açıklanan gerekli parametreleri yapılandırın. Diğer tüm parametreler için varsayılan değerleri kullanın.

    Parameter

    Configuration

    Method

    Image seçeneğini belirleyin.

    Condition

    Object Name Prefix seçeneğini belirleyin ve examplefolder/ olarak ayarlayın.

    Origin Type

    Back-to-origin to Private OSS Bucket seçeneğini belirleyin ve ardından Source Bucket açılan listesinden bucket-04 seçeneğini belirleyin.

    Bu seçenek yapılandırıldıktan sonra, bir istemci bulunmayan bir nesneyi talep ettiğinde OSS, belirtilen özel kaynak paketinden verileri almak için varsayılan rol olan AliyunOSSMirrorDefaultRole rolünü kullanır. Bu işlem, OSS'in yalnızca salt okunur modda kaynak verilere erişebilmesini ve bunları değiştirememesini veya silememesini sağlayan AliyunOSSReadOnlyAccess iznini gerektirir.

    Özel bir OSS paketi için yansıtabanlı geri kaynağa erişimi yapılandırmak üzere bir RAM kullanıcısının ram:GetRole iznine sahip olması gerekir. Bu izin, AliyunOSSMirrorDefaultRole rolünün var olup olmadığını kontrol etmek için kullanılır.

    • Rol mevcutsa doğrudan kullanılır.

    • Rol mevcut değilse, RAM kullanıcısıyla ilişkili birincil Alibaba Cloud hesabını kullanarak AliyunOSSMirrorDefaultRole rolünü önceden oluşturmanızı ve buna AliyunOSSReadOnlyAccess iznini vermenizi öneririz. Bu uygulama, RAM kullanıcısına rol oluşturma (ram:CreateRole) ve rollere ilke ekleme (ram:AttachPolicyToRole) gibi yüksek riskli izinlerin verilmesini önler. Rol yetkilendirildikten sonra RAM kullanıcısı mevcut rolü yeniden kullanabilir, bu da izin yapılandırma risklerini azaltır.

    Origin URL

    İlk sütunu https olarak ayarlayın ve diğer alanları boş bırakın.

    Origin Parameter

    Transfer with Query String seçeneğini belirleyin.

    OSS, URL isteğindeki sorgu dizesini kaynak sunucuya iletir.

    Set Transmission Rule of HTTP Header

    Transmit Specific HTTP Headers seçeneğini belirleyin ve header1, header2 ile header3 HTTP başlıklarını ekleyin. Geri kaynağa erişim kuralları, authorization, authorization2, range, content-length ve date gibi bazı standart HTTP başlıklarının veya x-oss-, oss- ya da x-drs- ile başlayan herhangi bir başlığın iletilmesini desteklemez.

    Önemli

    Özel bir paketten alım yaparken tüm HTTP başlıklarını iletme seçeneğini belirlemeyin. Bu durum, geri kaynağa erişim alımının başarısız olmasına neden olur.

  5. OK seçeneğine tıklayın.

Adım 2: Kuralı doğrulayın

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

  2. bucket-03 paketinde examplefolder/example.png nesnesi yoksa, OSS nesne için https://bucket-04.oss-cn-shanghai.aliyuncs.com/examplefolder/example.png?caller=lucas&production=oss adresine bir istek gönderir.

  3. bucket-04 paketi, iletilen ?caller=lucas&production=oss parametrelerine göre example.png nesnesini OSS'e döndürür.

  4. OSS, alınan nesneyi bucket-03 paketinde examplefolder/example.png olarak kaydeder.

İstek ayrıca header1, header2 ve header3 HTTP başlıklarını taşıyorsa, OSS bunları da bucket-04 paketine iletir.

Üretim kullanım örnekleri

Kesintisiz veri geçişi

Geçiş çözümü hakkında daha fazla bilgi için bkz. Yansıtabanlı geri kaynağa erişim kullanarak hizmetleri kesintisiz olarak Alibaba Cloud OSS'ye geçirme.

Önbelleğe alınan nesneleri yenileyin

Yansıtabanlı geri kaynağa erişim, tek seferlik bir önbellekleme mekanizmasıdır. Kaynak sunucudaki bir nesne güncellendiğinde OSS bunu otomatik olarak yenilemez veya yeniden almaz. Önbelleğe alınan nesneleri manuel olarak yenilemek için aşağıdaki yöntemleri kullanabilirsiniz.

  • Manuel silme: Konsolu veya bir API kullanarak nesneyi OSS paketinden silin. Nesneye bir sonraki erişimde geri kaynağa erişim kuralı tekrar tetiklenir.

  • Yaşam döngüsü kuralları: Yansıtılan nesneler için bir sona erme ilkesi yapılandırın. Belirtilen bir sürenin sonunda otomatik olarak silinirler ve periyodik yenilemeler sağlanır.

  • Nesne adı sürümleme: Kaynak sunucudaki bir nesneyi güncellerken yeni bir ad kullanın (örneğin, style.v2.css). Önbellekleme sorunlarını önlemek için önerilen yaklaşım budur.

Risk önleme ve hata toleransı

  • Kaynak sunucu yükü: Kaynak sunucunuzun geri kaynağa erişim isteklerini işlemek için yeterli bant genişliğine ve işlem kapasitesine sahip olduğundan emin olun. Kaynak sunucunuzdaki yükü izlemenizi ve verileri yoğun olmayan saatlerde önceden ısıtmanızı öneririz.

  • Maliyet kontrolü: Beklenmedik yüksek maliyetlerden kaçınmak için Alibaba Cloud Management Console'da maliyet uyarıları ayarlamanızı ve geri kaynağa erişim isteklerinin hacmini izlemenizi öneririz.

  • Güvenlik yapılandırması: Kaynak sunucunuzun OSS tarafından erişilebilir olduğundan emin olun. Kaynak URL HTTPS protokolünü kullanıyorsa, kaynak sunucunun sertifikasının güvenilir bir Sertifika Yetkilisi (CA) tarafından verilmiş, alan adının eşleştiğinden ve sertifikanın süresinin dolmadığından emin olun.

  • Günlük sorgulama: Geri kaynağa erişimle ilgili günlükleri görüntülemek için gerçek zamanlı günlük sorgulama özelliğini kullanın. Geri kaynağa erişim istekleri için User-Agent dizesi aliyun-oss-mirror içerir.

Kotalar ve sınırlamalar

  • Kural sayısı ve sırası: Her paket için en fazla 20 geri kaynağa erişim kuralı yapılandırabilirsiniz. Kurallar, RuleNumber değerine göre artan sırada eşleştirilir. Bir kural eşleştiğinde yürütülür ve sonraki kurallar kontrol edilmez. Eşleştirme önceliğini, bir kuralın yanındaki Up veya Down seçeneklerini kullanarak ayarlayabilirsiniz.

  • Saniye başına sorgu (QPS) ve bant genişliği:

    • Çin anakarasındaki bölgeler: Varsayılan toplam QPS 2.000, toplam bant genişliği ise 2 Gbit/s'dir.

    • Çin anakarası dışındaki bölgeler: Varsayılan toplam QPS 1.000, toplam bant genişliği ise 1 Gbit/s'dir.

    • Bu sınır, ilgili bölgedeki tek bir Alibaba Cloud hesabına ait tüm paketler için toplam yansıtabanlı geri kaynağa erişim kapasitesine uygulanır. Bu sınırı aşan istekler kısıtlanır ve 503 hatası döndürülür. Daha yüksek bir kota talep etmek için Teknik Destek ile iletişime geçin.

  • Kaynak sunucu adresi: Adres, RFC 3986 kodlama standartlarına uygun, genel olarak erişilebilir bir alan adı veya IP adresi olmalıdır. Dahili ağ adresleri desteklenmez.

  • Zaman aşımı: Yansıtabanlı geri kaynağa erişim için varsayılan zaman aşımı 10 saniyedir.

  • Parçalı geri kaynağa erişim: Kaynak sunucunuz aralık isteklerini destekliyorsa ve parçalı geri kaynağa erişim özelliğine ihtiyacınız varsa Teknik Destek ile iletişime geçin.

SSS

Yansıtılan nesne boyutu kaynakla farklılık gösteriyor

Yansıtılan nesne ile kaynak nesne arasında bir boyut farkı bulursanız soruşturmak için aşağıdaki adımları izleyin.

  1. Yansıtılan nesnenin ve kaynak nesnenin Last-Modified zaman damgalarını kontrol edin.

    import oss2
    import requests
    from datetime import datetime
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    
    # Obtain credentials from environment variables. Before running this code,
    # make sure the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    
    # Specify the endpoint for the region where your bucket is located.
    # For example, for China (Hangzhou), the endpoint is https://oss-cn-hangzhou.aliyuncs.com.
    endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
    
    # Specify the region corresponding to the endpoint, e.g., cn-hangzhou.
    # This parameter is required for V4 signatures.
    region = "cn-hangzhou"
    
    # Replace "yourBucketName" with the name of the bucket where you configured the rule.
    bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
    # Specify the full path of the mirrored object.
    object_key = 'yourObjectKey'
    # Specify the full path of the source object.
    source_url = 'yourSourceUrl'
    
    # Get the Last-Modified timestamp of the mirrored object.
    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}")
    
    # Get the Last-Modified timestamp of the source object.
    response = requests.head(source_url)
    source_last_modified = response.headers.get('last-modified')
    print(f"Source Last-Modified: {source_last_modified}")
    
    # Convert the timestamp strings to datetime objects for comparison.
    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.")
    • Kaynak dosyanın Last-Modified zaman damgası yansıtılan dosyanın Last-Modified zaman damgasından büyükse, bu durum kaynak dosyanın yansıtılan dosya oluşturulduktan sonra güncellenmiş olabileceğini gösterir.

      Not

      OSS bir nesneyi kaynak sunucudan alıp bir pakete yazdığında, kaynak nesnenin Last-Modified zaman damgasını korumaz. Bunun yerine, OSS yansıtılan nesnenin Last-Modified zaman damgasını, nesnenin OSS'te oluşturulduğu veya güncellendiği zamana ayarlar.

    • Kaynak dosyanın Last-Modified zaman damgası yansıtabanlı geri kaynağa erişim dosyasının Last-Modified zaman damgasından küçük veya eşitse, bu durum yansıtabanlı geri kaynağa erişim dosyası oluşturulduğundan beri kaynak dosyanın güncellenmediğini gösterir. Sonraki adım, her iki dosyanın da MD5 veya CRC64 sağlama toplamı değerlerini kontrol etmektir.

  2. Yansıtılan nesnenin ve kaynak nesnenin MD5 veya CRC64 sağlama toplamlarını karşılaştırın.

    # -*- coding: utf-8 -*-
    import oss2
    import hashlib
    import requests
    # For CRC64 comparison, the Python standard library does not support CRC64.
    # You can use a third-party library like crcmod.
    # Install crcmod: pip install crcmod
    import crcmod
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    
    # Obtain credentials from environment variables. Before running this code,
    # make sure the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    
    # Specify the endpoint for the region where your bucket is located.
    # For example, for China (Hangzhou), the endpoint is https://oss-cn-hangzhou.aliyuncs.com.
    endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
    
    # Specify the region corresponding to the endpoint, e.g., cn-hangzhou.
    # This parameter is required for V4 signatures.
    region = "cn-hangzhou"
    
    # Replace "yourBucketName" with the name of the bucket where you configured the rule.
    bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
    # Specify the full path of the mirrored object.
    object_key = 'yourObjectKey'
    # Specify the full path of the source object.
    source_url = 'yourSourceUrl'
    
    # Get the metadata of the mirrored object.
    oss_object_info = bucket.get_object_meta(object_key)
    
    oss_md5 = oss_object_info.headers.get('etag', '').strip('"')  # ETag is usually the MD5 hash
    oss_crc64 = oss_object_info.headers.get('x-oss-hash-crc64ecma', '')
    
    print(f"OSS MD5: {oss_md5}")
    print(f"OSS CRC64: {oss_crc64}")
    
    # Get the content of the source object and calculate its MD5 and 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)  # Convert to hex string and format
        print(f"Source CRC64: {source_crc64}")
    
        # Compare the MD5 values.
        if oss_md5 == source_md5:
            print("MD5 checksums are identical.")
        else:
            print("MD5 checksums do not match.")
    
        # Compare the CRC64 values.
        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 veya CRC64 sağlama toplamları aynıysa, iki nesnenin içeriği de aynıdır. Bu durumda boyutları da aynı olmalıdır.

    • MD5 veya CRC64 sağlama toplamları eşleşmiyorsa, iki nesnenin içeriği farklıdır. Özel istek başlıklarını kontrol etmek için sonraki adıma geçin.

  3. Özel istek başlıklarını kontrol edin.

    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
    • Geri kaynağa erişim isteğinin Accept-Encoding: gzip, deflate, br gibi özel HTTP istek başlıkları içerip içermediğini kontrol edin. Bu başlık, istemcinin sıkıştırılmış verileri kabul edebileceğini belirtir.

    • Geri kaynağa erişim isteği HTTP sıkıştırma kullanıyorsa ve istenen nesne sıkıştırma kriterlerini karşılıyorsa, iki nesnenin boyutları farklı olacaktır.

    • Accept-Encoding başlığı varsa bunu iletmemelisiniz.

      • Tüm HTTP başlıklarını iletmek üzere kuralı yapılandırdıysanız, accept-encoding başlığını yasaklanan başlıklar listesine ekleyin.

      • Belirli HTTP başlıklarını iletmek üzere kuralı yapılandırdıysanız, accept-encoding başlığının belirtilen başlıklar listesinde yer almadığından emin olun.

        Transmit Specific HTTP Headers seçeneğini belirleyin ve parametre giriş alanına content-type ekleyin.

Geri kaynağa erişim hatalarını giderin

Bir kaynak alım hatasıyla (örneğin 424 MirrorFailed hatası) karşılaşırsanız sorunu aşağıdaki adımları izleyerek giderebilirsiniz.

  1. Kaynak sunucunun ulaşılabilirliğini kontrol edin.

    # Replace the URL with your actual origin server address and file path
    curl -I "https://www.example.com/images/test.jpg"
  2. DNS çözümlemesini kontrol edin.

    # Replace the domain name with your actual origin domain name
    nslookup www.example.com
  3. HTTPS sertifikasını kontrol edin (kaynak sunucu HTTPS kullanıyorsa).

    # Replace the domain name with your actual origin domain name
    openssl s_client -connect www.example.com:443 -servername www.example.com
  4. OSS'un gerçek zamanlı günlük sorgulama özelliğini kullanarak sorunu analiz edin.

Yansıtılan nesne oluşturulmadı

Bir istemci HEAD isteği, içeriği indirmeden yalnızca boyut ve tür gibi nesne meta verilerini alır. Bu nedenle HEAD istekleri, bir nesneyi kaynak sunucudan almak ve OSS paketinde yazmak için yansıtabanlı geri kaynağa erişim kurallarını tetiklemez.

Geri kaynağa erişimden beklenmeyen durum kodu

Bir istek yansıtabanlı geri kaynağa erişimi tetiklediğinde, kaynak sunucu 404, 200 veya 206 dışında bir durum kodu döndürürse kaynak sunucunun yanıtını analiz edin.

  • Kaynak OSS ise: Aşağıdaki yapılandırma öğelerini kontrol edin.

    • Belirli HTTP başlıklarının iletilmesini yasaklayın: Kaynak sunucu bilgilerinin açığa çıkmasını önlemek ve geri kaynağa erişim isteklerinin beklendiği gibi işlenmesini sağlamak için host başlığının iletilmesini yasaklayın. Host başlığının iletilmesini yasaklamazsanız, geri kaynağa erişim isteği hedef paketin host değerini kaynak sunucuya iletir. Her paketin host değeri benzersiz olduğundan, istenen host kaynağın gerçek host'uyla eşleşmezse kaynak sunucu 403 hatası döndürür. OSS ardından istemciye 424 hatası döndürür.

    • Özel bir OSS paketi için geri kaynağa erişim: İzinler yapılandırılmadıysa, hedef paketin ve nesnelerinin ACL'sinin public-read olarak ayarlanıp ayarlanmadığını kontrol edin. İzinler yapılandırıldıysa, yansıtabanlı geri kaynağa erişim için rol yetkilendirme ilkesinin değişip değişmediğini ve bunun yetersiz izinlere neden olup olmadığını kontrol edin. Yansıtabanlı geri kaynağa erişim için varsayılan rol AliyunOSSMirrorDefaultRole ve varsayılan sistem ilkesi AliyunOSSReadOnlyAccess şeklindedir.

  • Kaynak OSS değilse: Sunucu tarafı günlüklerini analiz edin ve kaynak sunucu hatasının spesifik nedenini belirlemek için Server Name Indication (SNI), geri kaynağa erişim parametreleri ve başlık iletme yapılandırmalarını kontrol edin. Kaynak sunucu 401 (Yetkisiz), 403 (Yasak) veya 5xx (Sunucu Dahili Hatası) gibi durum kodları döndürebilir.

Geri kaynağa erişim kuralı eşleştirme sırası

Kurallar, kural numarasına (RuleNumber) göre artan sırada eşleştirilir. Koşulları karşılayan ilk kural eşleştiğinde bu kural hemen yürütülür ve sonraki kurallar eşleştirilmez.

VPC veya dahili IP'den alma

Hayır. Kaynak sunucunun genel olarak erişilebilir bir adresi olmalıdır. Bir VPC'deki bir hizmete erişmek için bunu bir NAT Ağ Geçidi veya internete yönelik bir SLB örneği kullanarak genel internete açın.

Kaynak güncellendikten sonra OSS nesnesi güncellenmedi

Yansıtabanlı geri kaynağa erişim, tek seferlik bir çekme mekanizmasıdır ve kaynak sunucudan gelen güncellemeleri otomatik olarak senkronize etmez. Güncellenmiş bir nesneyi almak için yansıtılan nesneyi OSS'ten manuel olarak silmeniz veya bir nesne adı sürümleme stratejisi kullanmanız gerekir.