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.
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
Paketler sayfasına gidin ve hedef paketin adını tıklayın.
Sol gezinme bölmesinde seçeneğini belirleyin.
Mirroring-based Back-to-origin sayfasında Create Rule seçeneğine tıklayın.
-
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.comgirin. Üçüncü sütunu (Yol Öneki) boş bırakın. Yol öneki, kaynak URL'nin yolunu oluşturmak üzere alan adına eklenir. OK seçeneğine tıklayın.
Adım 2: Kuralı doğrulayın
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/examplefolder/example.txtadresine erişin.examplebucketpaketindeexamplefolder/example.txtnesnesi yoksa, OSS nesneyihttps://example.com/examplefolder/example.txtadresinden ister.OSS, nesneyi aldıktan sonra bunu
examplebucketpaketindeexamplefolder/example.txtolarak 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-01paketininexamplefolderdizininde bulunmayan bir nesneyi talep ettiğinde, OSS nesneyihttps://example.comweb sitesinindestfolderdizininden alır.OSS, alınan nesnenin MD5 karma değerini doğrular. MD5 karma değeri eşleşmeyen nesneler
bucket-01paketine kaydedilmez.
Adım 1: Yansıtabanlı geri kaynağa erişim kuralı yapılandırın
Paketler sayfasına gidin ve hedef paketin adını tıklayın.
Sol gezinme bölmesinde seçeneğini belirleyin.
Mirroring-based Back-to-origin sayfasında Create Rule seçeneğine tıklayın.
-
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.
NotBu 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.
OK seçeneğine tıklayın.
Adım 2: Kuralı doğrulayın
https://bucket-01.oss-cn-hangzhou.aliyuncs.com/examplefolder/example.txtadresine erişin.bucket-01paketindeexamplefolder/example.txtnesnesi yoksa, OSS nesneyihttps://example.com/destfolder/example.txtadresinden ister.-
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-01paketineexamplefolder/example.txtolarak kaydeder ve nesneyi istemciye döndürür. Değerler eşleşmezse OSS nesneyi istemciye döndürür ancakbucket-01paketine kaydetmez.Geri kaynağa erişim isteğinin yanıtı Content-MD5 başlığını içermiyorsa, OSS nesneyi
bucket-01paketineexamplefolder/example.txtolarak 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/dir1dizininde bulunmayan bir nesneyi talep ettiğinde, OSS nesneyihttps://example.comweb sitesininexample1dizininden alır.Bir istemci
bucket-02/dir2dizininde bulunmayan bir nesneyi talep ettiğinde, OSS nesneyihttps://example.orgweb sitesininexample2dizininden 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
Paketler sayfasına gidin ve hedef paketin adını tıklayın.
Sol gezinme bölmesinde seçeneğini belirleyin.
Mirroring-based Back-to-origin sayfasında Create Rule seçeneğine tıklayın.
-
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.
NotBu 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.
NotFollow 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.
NotBu 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.
-
OK seçeneğine tıklayın.
Adım 2: Kuralları doğrulayın
https://bucket-02.oss-cn-beijing.aliyuncs.com/dir1/example.txtadresine erişin.-
bucket-02paketinindir1dizinindeexample.txtnesnesi yoksa, OSS nesne içinhttps://example.com/example1/example.txtadresine bir istek gönderir.Kaynak Sunucu A'da
example1/example.txtiçin bir yeniden yönlendirme kuralı varsa, OSS yeniden yönlendirilen adrese yeni bir istek gönderir. Nesneyi aldıktan sonra bunubucket-02paketinedir1/example.txtolarak kaydeder ve istemciye döndürür.Kaynak Sunucu A'da
example1/example.txtiçin bir yeniden yönlendirme kuralı yoksa, OSS nesneyi alır, bunubucket-02paketinedir1/example.txtolarak kaydeder ve istemciye döndürür.
Bir istemci
https://bucket-02.oss-cn-beijing.aliyuncs.com/dir2/example.txtadresini talep ederse, yansıtabanlı geri kaynağa erişim kuralı aracılığıyla alınan nesnebucket-02paketindedir2/example.txtolarak 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-03paketininexamplefolderdizininde bulunmayan bir nesneyi talep ettiğinde, OSS nesneyibucket-04paketininexamplefolderdizininden alır.OSS, istek URL'sindeki sorgu dizesini kaynak sunucuya iletir.
OSS, istekten gelen
header1,header2veheader3HTTP başlıklarını kaynak sunucuya iletir.
Adım 1: Yansıtabanlı geri kaynağa erişim kuralı yapılandırın
Paketler sayfasına gidin ve hedef paketin adını tıklayın.
Sol gezinme bölmesinde seçeneğini belirleyin.
Mirroring-based Back-to-origin sayfasında Create Rule seçeneğine tıklayın.
-
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-04seç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
AliyunOSSMirrorDefaultRolerolü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ğlayanAliyunOSSReadOnlyAccessiznini 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:GetRoleiznine sahip olması gerekir. Bu izin,AliyunOSSMirrorDefaultRolerolü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
AliyunOSSMirrorDefaultRolerolünü önceden oluşturmanızı ve bunaAliyunOSSReadOnlyAccessiznini 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,header2ileheader3HTTP başlıklarını ekleyin. Geri kaynağa erişim kuralları,authorization,authorization2,range,content-lengthvedategibi bazı standart HTTP başlıklarının veyax-oss-,oss-ya dax-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.
OK seçeneğine tıklayın.
Adım 2: Kuralı doğrulayın
https://bucket-03.oss-cn-shanghai.aliyuncs.com/examplefolder/example.png?caller=lucas&production=ossadresine erişin.bucket-03paketindeexamplefolder/example.pngnesnesi yoksa, OSS nesne içinhttps://bucket-04.oss-cn-shanghai.aliyuncs.com/examplefolder/example.png?caller=lucas&production=ossadresine bir istek gönderir.bucket-04paketi, iletilen?caller=lucas&production=ossparametrelerine göreexample.pngnesnesini OSS'e döndürür.OSS, alınan nesneyi
bucket-03paketindeexamplefolder/example.pngolarak 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-mirroriç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.
-
Yansıtılan nesnenin ve kaynak nesnenin
Last-Modifiedzaman 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-Modifiedzaman damgası yansıtılan dosyanınLast-Modifiedzaman damgasından büyükse, bu durum kaynak dosyanın yansıtılan dosya oluşturulduktan sonra güncellenmiş olabileceğini gösterir.NotOSS bir nesneyi kaynak sunucudan alıp bir pakete yazdığında, kaynak nesnenin
Last-Modifiedzaman damgasını korumaz. Bunun yerine, OSS yansıtılan nesneninLast-Modifiedzaman damgasını, nesnenin OSS'te oluşturulduğu veya güncellendiği zamana ayarlar. Kaynak dosyanın
Last-Modifiedzaman damgası yansıtabanlı geri kaynağa erişim dosyasınınLast-Modifiedzaman 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.
-
-
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.
-
Ö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) elapsedGeri kaynağa erişim isteğinin
Accept-Encoding: gzip, deflate, brgibi ö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-Encodingbaşlığı varsa bunu iletmemelisiniz.Tüm HTTP başlıklarını iletmek üzere kuralı yapılandırdıysanız,
accept-encodingbaşlığını yasaklanan başlıklar listesine ekleyin.-
Belirli HTTP başlıklarını iletmek üzere kuralı yapılandırdıysanız,
accept-encodingbaş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-typeekleyin.
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.
-
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" -
DNS çözümlemesini kontrol edin.
# Replace the domain name with your actual origin domain name nslookup www.example.com -
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 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
AliyunOSSMirrorDefaultRoleve varsayılan sistem ilkesiAliyunOSSReadOnlyAccessş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.