Lorsqu'un client demande un objet qui n'existe pas dans OSS, OSS récupère automatiquement cet objet depuis votre serveur d'origine spécifié, le renvoie au client et le stocke dans votre compartiment.
Fonctionnement
La fonctionnalité de récupération par miroir vers l'origine agit comme un proxy côté serveur. Lorsqu'un client envoie une requête GET pour un objet absent d'un compartiment OSS, OSS vérifie si la requête déclenche une règle de récupération vers l'origine (par exemple, en faisant correspondre un préfixe de nom d'objet et en renvoyant une erreur HTTP 404). Si une règle est déclenchée, OSS envoie une requête HTTP au serveur d'origine spécifié pour récupérer l'objet. Si le serveur d'origine renvoie un code d'état 200 OK, OSS retourne l'objet au client et le stocke simultanément dans le compartiment. Si le serveur d'origine renvoie un code d'état d'erreur 404 Not Found ou autre, OSS renvoie l'erreur correspondante au client. Dans ce processus, OSS agit en tant que proxy, permettant une migration des données à la demande et une mise en cache ponctuelle. Notez qu'une fois qu'un objet est stocké dans OSS, il n'est pas automatiquement mis à jour même si l'objet source sur le serveur d'origine change.
Récupérer les objets manquants depuis un site web
Il s'agit du scénario le plus basique pour configurer la récupération par miroir vers l'origine. Lorsqu'un client demande un objet qui n'existe pas dans OSS, OSS le récupère automatiquement depuis un serveur d'origine spécifié et le stocke dans le compartiment. Cet exemple montre comment configurer une règle pour récupérer des objets depuis https://example.com/ lorsqu'un objet demandé est introuvable dans le répertoire examplefolder/ du compartiment examplebucket.
Étape 1 : Configurer une règle de récupération par miroir vers l'origine
Accédez à la page Buckets et cliquez sur le nom du compartiment cible.
Dans le volet de navigation de gauche, choisissez .
Sur la page Mirroring-based Back-to-origin, cliquez sur Create Rule.
-
Dans le panneau Create Rule, configurez les paramètres. Utilisez les valeurs par défaut pour tous les autres paramètres.
Parameter
Configuration
Method
Sélectionnez Image.
Condition
Sélectionnez Object Name Prefix et saisissez examplefolder/ dans la zone de texte.
Origin URL
Dans la première colonne (Protocol), sélectionnez https. Dans la deuxième colonne (Domain Name), saisissez
example.com. Laissez la troisième colonne (Path Prefix) vide. Le préfixe de chemin est ajouté au nom de domaine pour former le chemin de l'URL d'origine. Cliquez sur OK.
Étape 2 : Vérifier la règle
Accédez à
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/examplefolder/example.txt.Si l'objet
examplefolder/example.txtn'existe pas dans le compartimentexamplebucket, OSS demande l'objet depuishttps://example.com/examplefolder/example.txt.Après avoir récupéré l'objet, OSS l'enregistre sous le nom
examplefolder/example.txtdans le compartimentexamplebucketet le renvoie au client.
Remplacer le répertoire et vérifier l'intégrité
Dans certains scénarios, la structure des répertoires de votre compartiment OSS peut différer de celle de votre serveur d'origine. Vous devrez peut-être également garantir l'intégrité des objets récupérés depuis le serveur d'origine. Ce cas d'utilisation montre comment mapper les répertoires et utiliser la vérification MD5 pour assurer un transfert de données fiable.
Lorsqu'un client demande un objet qui n'existe pas dans le répertoire
examplefolderdu compartimentbucket-01dans la région Chine (Hangzhou), OSS récupère l'objet depuis le répertoiredestfolderdu site webhttps://example.com.OSS vérifie le hachage MD5 de l'objet récupéré. Les objets dont le hachage MD5 ne correspond pas ne sont pas enregistrés dans le compartiment
bucket-01.
Étape 1 : Configurer une règle de récupération par miroir vers l'origine
Accédez à la page Buckets et cliquez sur le nom du compartiment cible.
Dans le volet de navigation de gauche, choisissez .
Sur la page Mirroring-based Back-to-origin, cliquez sur Create Rule.
-
Dans le panneau Create Rule, configurez les paramètres requis comme décrit dans le tableau suivant. Utilisez les valeurs par défaut pour les autres paramètres.
Parameter
Configuration
Method
Select Image.
Condition
Select Object Name Prefix and set it to examplefolder/.
Replace or Delete File Prefix
Select Replace or Delete File Prefix and set it to destfolder/.
RemarqueThis option is displayed only after you set Object Name Prefix for the back-to-origin condition.
Origin URL
Set the first column to https, the second column to example.com, and leave the third column empty.
MD5 Verification
Select Perform MD5 verification. If the response to the back-to-origin request contains the Content-MD5 header, OSS verifies whether the MD5 hash of the fetched object matches the value of the Content-MD5 header.
If the values match, the client receives the object, and OSS saves the object.
If the values do not match, the client still receives the object, but OSS does not save it. This is because calculating the MD5 hash requires the complete object data, and at that point, the object has already been streamed to the client.
Cliquez sur OK.
Étape 2 : Vérifier la règle
Accédez à
https://bucket-01.oss-cn-hangzhou.aliyuncs.com/examplefolder/example.txt.Si l'objet
examplefolder/example.txtn'existe pas dans le compartimentbucket-01, OSS demande l'objet depuishttps://example.com/destfolder/example.txt.-
Après avoir récupéré l'objet, OSS effectue les opérations suivantes :
Si la réponse à la requête de récupération vers l'origine contient l'en-tête Content-MD5, OSS calcule le hachage MD5 de l'objet récupéré et le compare à la valeur de l'en-tête Content-MD5. Si les valeurs correspondent, OSS enregistre l'objet sous le nom
examplefolder/example.txtdans le compartimentbucket-01et le renvoie au client. Si les valeurs ne correspondent pas, OSS renvoie l'objet au client mais ne l'enregistre pas dans le compartimentbucket-01.Si la réponse à la requête de récupération vers l'origine ne contient pas l'en-tête Content-MD5, OSS enregistre l'objet sous le nom
examplefolder/example.txtdans le compartimentbucket-01et le renvoie au client.
Acheminer les requêtes en fonction du répertoire
Si votre activité implique plusieurs serveurs d'origine, vous pouvez acheminer les requêtes vers différents serveurs en fonction du chemin de l'objet demandé. Ce scénario est utile pour consolider des données provenant de plusieurs sources ou migrer depuis une architecture de stockage distribuée. Par exemple, vous disposez de deux serveurs d'origine avec des structures de répertoires identiques, le serveur d'origine A (https://example.com) et le serveur d'origine B (https://example.org), et vous souhaitez mettre en œuvre le comportement suivant :
Lorsqu'un client demande un objet qui n'existe pas dans le répertoire
bucket-02/dir1dans la région Chine (Pékin), OSS récupère l'objet depuis le répertoireexample1du site webhttps://example.com.Lorsqu'un client demande un objet qui n'existe pas dans le répertoire
bucket-02/dir2, OSS récupère l'objet depuis le répertoireexample2du site webhttps://example.org.Selon que des politiques de redirection sont configurées sur le serveur d'origine A et le serveur d'origine B, OSS décide s'il doit demander l'objet depuis l'adresse redirigée.
Étape 1 : Configurer les règles de récupération par miroir vers l'origine
Accédez à la page Buckets et cliquez sur le nom du compartiment cible.
Dans le volet de navigation de gauche, choisissez .
Sur la page Mirroring-based Back-to-origin, cliquez sur Create Rule.
-
Dans le panneau Create Rule, configurez deux règles de récupération par miroir vers l'origine comme décrit ci-dessous. Utilisez les valeurs par défaut pour tous les autres paramètres.
-
Rule 1
Parameter
Configuration
Method
Select Image.
Condition
Select Object Name Prefix and set it to dir1/.
Replace or Delete File Prefix
Select Replace or Delete File Prefix and set it to example1/.
RemarqueThis option is displayed only after you set Object Name Prefix for the back-to-origin condition.
Origin URL
Set the first column to https, the second column to example.com, and leave the third column empty.
3xx Response
Select Follow Origin to Redirect Request.
RemarqueIf Follow Origin to Redirect Request is not selected, OSS returns the redirect address specified by the origin server directly to the client.
-
Rule 2
Parameter
Configuration
Method
Select Image.
Condition
Select Object Name Prefix and set it to dir2/.
Replace or Delete File Prefix
Select Replace or Delete File Prefix and set it to example2/.
RemarqueThis option is displayed only after you set Object Name Prefix for the back-to-origin condition.
Origin URL
Set the first column to https, the second column to example.org, and leave the third column empty.
3xx Response
Select Follow Origin to Redirect Request.
-
Cliquez sur OK.
Étape 2 : Vérifier les règles
Accédez à
https://bucket-02.oss-cn-beijing.aliyuncs.com/dir1/example.txt.-
Si l'objet
example.txtn'existe pas dans le répertoiredir1du compartimentbucket-02, OSS envoie une requête pour l'objet vershttps://example.com/example1/example.txt.Si le serveur d'origine A possède une règle de redirection pour
example1/example.txt, OSS envoie une nouvelle requête vers l'adresse redirigée. Après avoir récupéré l'objet, OSS l'enregistre sous le nomdir1/example.txtdans le compartimentbucket-02et le renvoie au client.Si le serveur d'origine A ne possède pas de règle de redirection pour
example1/example.txt, OSS récupère l'objet, l'enregistre sous le nomdir1/example.txtdans le compartimentbucket-02et le renvoie au client.
Si un client demande
https://bucket-02.oss-cn-beijing.aliyuncs.com/dir2/example.txt, l'objet récupéré via la règle de récupération par miroir vers l'origine est stocké sous le nomdir2/example.txtdans le compartimentbucket-02.
Récupération depuis un compartiment privé et transfert des paramètres
Lorsque votre serveur d'origine est un compartiment OSS privé, vous devez configurer les autorisations d'accès nécessaires. Il peut également s'avérer nécessaire de transférer certains paramètres de la requête client vers le serveur d'origine. Ce cas d'utilisation explique comment configurer la récupération d'origine (back-to-origin) pour un compartiment OSS privé et assurer le transfert des paramètres. Par exemple, vous disposez de deux compartiments dans la région Chine (Shanghai) : bucket-03 (lecture publique) et bucket-04 (privé). Vous souhaitez mettre en œuvre le comportement suivant :
Lorsqu'un client demande un objet qui n'existe pas dans le répertoire
examplefolderdu compartimentbucket-03, OSS récupère l'objet depuis le répertoireexamplefolderdu compartimentbucket-04.OSS transmet la chaîne de requête de l'URL de la requête au serveur d'origine.
OSS transmet les en-têtes HTTP
header1,header2etheader3de la requête au serveur d'origine.
Étape 1 : Configurer une règle de récupération d'origine par miroir
Accédez à la page Buckets et cliquez sur le nom du compartiment cible.
Dans le volet de navigation de gauche, choisissez .
Sur la page Mirroring-based Back-to-origin, cliquez sur Create Rule.
-
Dans le panneau Create Rule, configurez les paramètres requis comme décrit dans le tableau suivant. Conservez les valeurs par défaut pour les autres paramètres.
Paramètre
Configuration
Method
Sélectionnez Image.
Condition
Sélectionnez Object Name Prefix et définissez-le sur examplefolder/.
Origin Type
Sélectionnez Back-to-origin to Private OSS Bucket, puis choisissez
bucket-04dans la liste déroulante Source Bucket.Une fois cette option configurée, lorsqu'un client demande un objet inexistant, OSS utilise le rôle par défaut
AliyunOSSMirrorDefaultRolepour récupérer les données depuis le compartiment d'origine privé spécifié. Cela nécessite l'autorisationAliyunOSSReadOnlyAccess, qui garantit qu'OSS ne peut accéder aux données d'origine qu'en mode lecture seule et ne peut ni les modifier ni les supprimer.Pour configurer la récupération d'origine par miroir pour un compartiment OSS privé, un utilisateur RAM doit disposer de l'autorisation
ram:GetRole. Cette autorisation permet de vérifier si le rôleAliyunOSSMirrorDefaultRoleexiste.Si le rôle existe, il est utilisé directement.
Si le rôle n'existe pas, nous vous recommandons d'utiliser le compte principal Alibaba Cloud associé à l'utilisateur RAM pour créer préalablement le rôle
AliyunOSSMirrorDefaultRoleet lui accorder l'autorisationAliyunOSSReadOnlyAccess. Cette pratique évite d'accorder des autorisations à haut risque, telles que la création de rôles (ram:CreateRole) et l'attachement de politiques aux rôles (ram:AttachPolicyToRole), à l'utilisateur RAM. Une fois le rôle autorisé, l'utilisateur RAM peut réutiliser le rôle existant, ce qui réduit les risques liés à la configuration des autorisations.
Origin URL
Définissez la première colonne sur https et laissez les autres champs vides.
Origin Parameter
Sélectionnez Transfer with Query String.
OSS transmet la chaîne de requête de l'URL de la requête au serveur d'origine.
Set Transmission Rule of HTTP Header
Sélectionnez Transmit Specific HTTP Headers et ajoutez les en-têtes HTTP
header1,header2etheader3. Les règles de récupération d'origine ne prennent pas en charge le transfert de certains en-têtes HTTP standard, tels queauthorization,authorization2,range,content-lengthetdate, ni aucun en-tête commençant parx-oss-,oss-oux-drs-.ImportantLors de la récupération depuis un compartiment privé, ne sélectionnez pas l'option permettant de transférer tous les en-têtes HTTP. Cela entraînerait l'échec de la récupération d'origine.
Cliquez sur OK.
Étape 2 : Vérifier la règle
Accédez à
https://bucket-03.oss-cn-shanghai.aliyuncs.com/examplefolder/example.png?caller=lucas&production=oss.Si l'objet
examplefolder/example.pngn'existe pas dans le compartimentbucket-03, OSS envoie une requête pour cet objet àhttps://bucket-04.oss-cn-shanghai.aliyuncs.com/examplefolder/example.png?caller=lucas&production=oss.Le compartiment
bucket-04renvoie l'objetexample.pngà OSS en fonction des paramètres?caller=lucas&production=osstransférés.OSS enregistre l'objet récupéré sous le nom
examplefolder/example.pngdans le compartimentbucket-03.
Si la requête contient également les en-têtes HTTP header1, header2 et header3, OSS les transmet également au compartiment bucket-04.
Cas d'utilisation en production
Migration transparente des données
Pour plus d'informations sur la solution de migration, consultez Migration transparente des services vers Alibaba Cloud OSS à l'aide de la récupération d'origine par miroir.
Actualisation des objets mis en cache
La récupération d'origine par miroir est un mécanisme de mise en cache ponctuel. Si un objet sur le serveur d'origine est mis à jour, OSS ne l'actualise ni ne le récupère automatiquement. Vous pouvez utiliser les méthodes suivantes pour actualiser manuellement les objets mis en cache.
Suppression manuelle : Supprimez l'objet du compartiment OSS à l'aide de la console ou d'une API. La règle de récupération d'origine sera de nouveau déclenchée lors du prochain accès à l'objet.
Règles de cycle de vie : Configurez une politique d'expiration pour les objets mis en miroir. Ils seront automatiquement supprimés après une période spécifiée, permettant ainsi des actualisations périodiques.
Versionnement des noms d'objets : Lorsque vous mettez à jour un objet sur le serveur d'origine, utilisez un nouveau nom (par exemple,
style.v2.css). Cette approche est recommandée pour éviter les problèmes de mise en cache.
Prévention des risques et tolérance aux pannes
Charge du serveur d'origine : Assurez-vous que votre serveur d'origine dispose d'une bande passante et d'une capacité de traitement suffisantes pour gérer les requêtes de récupération d'origine. Nous vous recommandons de surveiller la charge de votre serveur d'origine et d'envisager un préchauffage des données pendant les heures creuses.
Contrôle des coûts : Pour éviter des coûts élevés inattendus, nous vous recommandons de configurer des alertes de coût dans la console Alibaba Cloud Management Console afin de surveiller le volume des requêtes de récupération d'origine.
Configuration de sécurité : Assurez-vous que votre serveur d'origine est accessible par OSS. Si l'URL d'origine utilise le protocole HTTPS, vérifiez que le certificat du serveur d'origine est émis par une autorité de certification (CA) approuvée, que le nom de domaine correspond et que le certificat n'a pas expiré.
Requête de journaux : Utilisez la fonctionnalité requête de journaux en temps réel pour afficher les journaux relatifs à la récupération d'origine. L'User-Agent des requêtes de récupération d'origine contient la chaîne
aliyun-oss-mirror.
Quotas et limites
Nombre et ordre des règles : Vous pouvez configurer jusqu'à 20 règles de récupération d'origine pour chaque compartiment. Les règles sont mises en correspondance par ordre croissant de leur RuleNumber. Dès qu'une règle correspond, elle est exécutée et les règles suivantes ne sont pas vérifiées. Vous pouvez ajuster la priorité de correspondance à l'aide des options Up ou Down situées à côté d'une règle.
-
QPS et bande passante :
Régions en Chine continentale : Le QPS total par défaut est de 2 000 et la bande passante totale est de 2 Gbit/s.
Régions hors de Chine continentale : Le QPS total par défaut est de 1 000 et la bande passante totale est de 1 Gbit/s.
Cette limite s'applique à la capacité totale de récupération d'origine par miroir pour tous les compartiments appartenant à un seul compte Alibaba Cloud dans la région correspondante. Les requêtes dépassant cette limite sont limitées (throttling) et une erreur 503 est renvoyée. Pour demander un quota supérieur, contactez le support technique.
Adresse du serveur d'origine : L'adresse doit être un nom de domaine ou une adresse IP publiquement accessible, conforme aux normes d'encodage RFC 3986. Les adresses de réseau interne ne sont pas prises en charge.
Délai d'attente : Le délai d'attente par défaut pour la récupération d'origine par miroir est de 10 secondes.
Récupération d'origine fragmentée (chunked) : Si votre serveur d'origine prend en charge les requêtes de plage et que vous avez besoin de la fonctionnalité de récupération d'origine fragmentée, contactez le support technique.
FAQ
La taille de l'objet mis en miroir diffère de celle de la source
Si vous constatez une différence de taille entre l'objet mis en miroir et l'objet source, suivez les étapes ci-dessous pour enquêter.
-
Vérifiez les horodatages
Last-Modifiedde l'objet mis en miroir et de l'objet source.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.")-
Si l'horodatage
Last-Modifieddu fichier source est supérieur à l'horodatageLast-Modifieddu fichier mis en miroir, cela indique que le fichier source a peut-être été mis à jour après la génération du fichier mis en miroir.RemarqueLorsqu'OSS récupère un objet depuis un serveur d'origine et l'écrit dans un compartiment, il ne conserve pas l'horodatage
Last-Modifiedde l'objet source. À la place, OSS définit l'horodatageLast-Modifiedde l'objet mis en miroir sur l'heure de sa création ou de sa mise à jour dans OSS. Si l'horodatage
Last-Modifieddu fichier source est ≤ à l'horodatageLast-Modifieddu fichier de récupération d'origine par miroir, cela indique que le fichier source n'a pas été mis à jour depuis la génération du fichier de récupération d'origine par miroir. L'étape suivante consiste à vérifier les valeurs de somme de contrôle MD5 ou CRC64 des deux fichiers.
-
-
Comparez les sommes de contrôle MD5 ou CRC64 de l'objet mis en miroir et de l'objet source.
# -*- 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}")Si les sommes de contrôle MD5 ou CRC64 sont identiques, le contenu des deux objets est le même. Dans ce cas, leurs tailles doivent également être identiques.
Si les sommes de contrôle MD5 ou CRC64 ne correspondent pas, le contenu des deux objets est différent. Passez à l'étape suivante pour vérifier la présence d'en-têtes de requête spéciaux.
-
Vérifiez la présence d'en-têtes de requête spéciaux.
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) elapsedVérifiez si la requête de récupération d'origine contient des en-têtes de requête HTTP spéciaux, tels que
Accept-Encoding: gzip, deflate, br. Cet en-tête indique que le client peut accepter des données compressées.Si la requête de récupération d'origine utilise la compression HTTP et que l'objet demandé répond aux critères de compression, les tailles des deux objets seront différentes.
-
Si l'en-tête
Accept-Encodingest présent, ne le transférez pas.Si vous avez configuré la règle pour transférer tous les en-têtes HTTP, ajoutez
accept-encodingà la liste des en-têtes interdits.-
Si vous avez configuré la règle pour transférer des en-têtes HTTP spécifiques, assurez-vous que
accept-encodingn'est pas inclus dans la liste des en-têtes spécifiés.Sélectionnez Transmit Specific HTTP Headers et ajoutez
content-typedans le champ de saisie des paramètres.
Dépannage des échecs de récupération d'origine
Si vous rencontrez un échec de récupération depuis l'origine (tel qu'une erreur 424 MirrorFailed), vous pouvez résoudre le problème en suivant les étapes ci-dessous.
-
Vérifiez l'accessibilité du serveur d'origine.
# Replace the URL with your actual origin server address and file path curl -I "https://www.example.com/images/test.jpg" -
Vérifiez la résolution DNS.
# Replace the domain name with your actual origin domain name nslookup www.example.com -
Vérifiez le certificat HTTPS (si le serveur d'origine utilise HTTPS).
# Replace the domain name with your actual origin domain name openssl s_client -connect www.example.com:443 -servername www.example.com Analysez le problème à l'aide de la fonctionnalité requête de journaux en temps réel d'OSS.
Aucun objet mis en miroir créé
Une requête HEAD d'un client récupère uniquement les métadonnées de l'objet, telles que la taille et le type, sans télécharger le contenu. Par conséquent, les requêtes HEAD ne déclenchent pas les règles de récupération d'origine par miroir pour récupérer un objet depuis le serveur d'origine et l'écrire dans le compartiment OSS.
Code d'état inattendu provenant de la récupération d'origine
Lorsqu'une requête déclenche une récupération d'origine par miroir, si le serveur d'origine renvoie un code d'état autre que 404, 200 ou 206, analysez la réponse du serveur d'origine.
-
L'origine est OSS : Vérifiez les éléments de configuration suivants.
Interdire le transfert d'en-têtes HTTP spécifiques : Interdisez le transfert de l'en-tête host pour éviter d'exposer les informations du serveur d'origine et garantir que les requêtes de récupération d'origine sont traitées comme prévu. Si vous n'interdisez pas le transfert de l'en-tête host, la requête de récupération d'origine transmettra la valeur host du compartiment cible au serveur d'origine. Étant donné que la valeur host de chaque compartiment est unique, si le host demandé ne correspond pas au host réel de l'origine, le serveur d'origine renvoie une erreur 403. OSS renvoie alors une erreur 424 au client.
Récupération d'origine pour un compartiment OSS privé : Si les autorisations ne sont pas configurées, vérifiez si l'ACL du compartiment cible et de ses objets est définie sur public-read. Si les autorisations sont configurées, vérifiez si la stratégie d'autorisation de rôle pour la récupération d'origine par miroir a changé, entraînant des autorisations insuffisantes. Le rôle par défaut pour la récupération d'origine par miroir est
AliyunOSSMirrorDefaultRoleet sa politique système par défaut estAliyunOSSReadOnlyAccess.
L'origine n'est pas OSS : Analysez les journaux côté serveur et vérifiez les configurations pour l'indication du nom de serveur (SNI), les paramètres de récupération d'origine et le transfert d'en-têtes afin d'identifier la cause spécifique de l'erreur du serveur d'origine. Le serveur d'origine peut renvoyer des codes d'état tels que 401 (Non autorisé), 403 (Interdit) ou une erreur 5xx (Erreur interne du serveur).
Ordre de correspondance des règles de récupération d'origine
Les règles sont mises en correspondance en fonction du numéro de règle (RuleNumber) par ordre croissant. Après la correspondance de la première règle qui remplit les conditions, cette règle est immédiatement exécutée et aucune règle suivante n'est mise en correspondance.
Récupération depuis un VPC ou une IP interne
Non. Le serveur d'origine doit avoir une adresse publiquement accessible. Pour accéder à un service dans un VPC, exposez-le à Internet public à l'aide d'une passerelle NAT ou d'une instance SLB orientée Internet.
Objet OSS non mis à jour après la mise à jour de la source
La récupération d'origine par miroir est un mécanisme d'extraction ponctuel et ne synchronise pas automatiquement les mises à jour depuis le serveur d'origine. Pour récupérer un objet mis à jour, vous devez supprimer manuellement l'objet mis en miroir d'OSS ou utiliser une stratégie de versionnement des noms d'objets.