Todos os produtos
Search
Central de documentação

Object Storage Service:Retorno à origem por espelhamento

Última atualização: Oct 30, 2026

Quando um cliente solicita um objeto que não existe no OSS, o OSS busca automaticamente o objeto no servidor de origem especificado, retorna-o ao cliente e o armazena no seu bucket.

Como funciona

O recurso de retorno à origem por espelhamento funciona como um proxy no lado do servidor. Quando um cliente envia uma solicitação GET para um objeto que não existe em um bucket do OSS, o OSS verifica se a solicitação aciona uma regra de retorno à origem (por exemplo, correspondendo a um prefixo de nome de objeto e retornando um erro HTTP 404). Se uma regra for acionada, o OSS envia uma solicitação HTTP ao servidor de origem especificado para buscar o objeto. Se o servidor de origem retornar um código de status 200 OK, o OSS retorna o objeto ao cliente e, simultaneamente, o armazena no bucket. Se o servidor de origem retornar um código 404 Not Found ou outro código de erro, o OSS retorna o erro correspondente ao cliente. Nesse processo, o OSS atua como proxy, possibilitando a migração de dados sob demanda e o cache de uso único. Observe que, uma vez armazenado no OSS, o objeto não é atualizado automaticamente, mesmo que o objeto de origem no servidor de origem seja alterado.

image

Buscar objetos ausentes em um site

Este é o cenário mais básico de configuração do retorno à origem por espelhamento. Quando um cliente solicita um objeto que não existe no OSS, o OSS o busca automaticamente em um servidor de origem especificado e o armazena no bucket. Este exemplo mostra como configurar uma regra para buscar objetos em https://example.com/ quando o objeto solicitado não é encontrado no diretório examplefolder/ do bucket examplebucket.

Etapa 1: Configurar uma regra de retorno à origem por espelhamento

  1. Acesse a página Buckets e clique no nome do bucket desejado.

  2. No painel de navegação à esquerda, escolha Data Management > Mirroring-based Back-to-origin.

  3. Na página Mirroring-based Back-to-origin, clique em Create Rule.

  4. No painel Create Rule, configure os parâmetros. Use os valores padrão para os demais parâmetros.

    Parâmetro

    Configuração

    Method

    Selecione Image.

    Condition

    Selecione Object Name Prefix e insira examplefolder/ na caixa de texto.

    Origin URL

    Na primeira coluna (Protocol), selecione https. Na segunda coluna (Domain Name), insira example.com. Deixe a terceira coluna (Path Prefix) vazia. O prefixo de caminho é anexado ao nome de domínio para formar o caminho da URL de origem.

  5. Clique em OK.

Etapa 2: Verificar a regra

  1. Acesse https://examplebucket.oss-cn-hangzhou.aliyuncs.com/examplefolder/example.txt.

  2. Se o objeto examplefolder/example.txt não existir no bucket examplebucket, o OSS solicitará o objeto em https://example.com/examplefolder/example.txt.

  3. Após buscar o objeto, o OSS o salva como examplefolder/example.txt no bucket examplebucket e o retorna ao cliente.

Substituir diretório e verificar integridade

Em alguns cenários, a estrutura de diretórios no bucket do OSS pode ser diferente da estrutura do servidor de origem. Também pode ser necessário garantir a integridade dos objetos buscados no servidor de origem. Este caso de uso mostra como mapear diretórios e usar a verificação de MD5 para garantir a transferência confiável de dados.

  • Quando um cliente solicita um objeto que não existe no diretório examplefolder do bucket bucket-01 na região China (Hangzhou), o OSS busca o objeto no diretório destfolder do site https://example.com.

  • O OSS verifica o hash MD5 do objeto buscado. Objetos com hash MD5 diferente não são salvos no bucket bucket-01.

Etapa 1: Configurar uma regra de retorno à origem por espelhamento

  1. Acesse a página Buckets e clique no nome do bucket desejado.

  2. No painel de navegação à esquerda, escolha Data Management > Mirroring-based Back-to-origin.

  3. Na página Mirroring-based Back-to-origin, clique em Create Rule.

  4. No painel Create Rule, configure os parâmetros necessários conforme descrito na tabela a seguir. Use os valores padrão para os demais parâmetros.

    Parâmetro

    Configuração

    Method

    Selecione Image.

    Condition

    Selecione Object Name Prefix e defina como examplefolder/.

    Replace or Delete File Prefix

    Selecione Replace or Delete File Prefix e defina como destfolder/.

    Nota

    Esta opção é exibida somente após definir Object Name Prefix para a condição de retorno à origem.

    Origin URL

    Defina a primeira coluna como https, a segunda coluna como example.com e deixe a terceira coluna vazia.

    MD5 Verification

    Selecione Perform MD5 verification. Se a resposta à solicitação de retorno à origem contiver o cabeçalho Content-MD5, o OSS verifica se o hash MD5 do objeto buscado corresponde ao valor do cabeçalho Content-MD5.

    • Se os valores coincidirem, o cliente recebe o objeto e o OSS o salva.

    • Se os valores não coincidirem, o cliente ainda recebe o objeto, mas o OSS não o salva. Isso ocorre porque o cálculo do hash MD5 requer os dados completos do objeto e, nesse ponto, o objeto já foi transmitido ao cliente.

  5. Clique em OK.

Etapa 2: Verificar a regra

  1. Acesse https://bucket-01.oss-cn-hangzhou.aliyuncs.com/examplefolder/example.txt.

  2. Se o objeto examplefolder/example.txt não existir no bucket bucket-01, o OSS solicitará o objeto em https://example.com/destfolder/example.txt.

  3. Após buscar o objeto, o OSS executa as seguintes operações:

    • Se a resposta à solicitação de retorno à origem contiver o cabeçalho Content-MD5, o OSS calcula o hash MD5 do objeto buscado e o compara com o valor do cabeçalho Content-MD5. Se os valores coincidirem, o OSS salva o objeto como examplefolder/example.txt no bucket bucket-01 e o retorna ao cliente. Se os valores não coincidirem, o OSS retorna o objeto ao cliente, mas não o salva no bucket bucket-01.

    • Se a resposta à solicitação de retorno à origem não contiver o cabeçalho Content-MD5, o OSS salva o objeto como examplefolder/example.txt no bucket bucket-01 e o retorna ao cliente.

Roteamento de solicitações por diretório

Se o seu negócio envolve vários servidores de origem, você pode rotear solicitações para diferentes servidores com base no caminho do objeto solicitado. Este cenário é útil para consolidar dados de múltiplas fontes ou migrar de uma arquitetura de armazenamento distribuído. Por exemplo, se você tem dois servidores de origem com estruturas de diretórios idênticas, o Servidor de Origem A (https://example.com) e o Servidor de Origem B (https://example.org), e deseja implementar o seguinte comportamento:

  • Quando um cliente solicita um objeto que não existe no diretório bucket-02/dir1 na região China (Beijing), o OSS busca o objeto no diretório example1 do site https://example.com.

  • Quando um cliente solicita um objeto que não existe no diretório bucket-02/dir2, o OSS busca o objeto no diretório example2 do site https://example.org.

  • Dependendo de o Servidor de Origem A e o Servidor de Origem B terem políticas de redirecionamento configuradas, o OSS decide se deve solicitar o objeto a partir do endereço redirecionado.

Etapa 1: Configurar regras de retorno à origem por espelhamento

  1. Acesse a página Buckets e clique no nome do bucket desejado.

  2. No painel de navegação à esquerda, escolha Data Management > Mirroring-based Back-to-origin.

  3. Na página Mirroring-based Back-to-origin, clique em Create Rule.

  4. No painel Create Rule, configure duas regras de retorno à origem por espelhamento conforme descrito abaixo. Use os valores padrão para os demais parâmetros.

    • Regra 1

      Parâmetro

      Configuração

      Method

      Selecione Image.

      Condition

      Selecione Object Name Prefix e defina como dir1/.

      Replace or Delete File Prefix

      Selecione Replace or Delete File Prefix e defina como example1/.

      Nota

      Esta opção é exibida somente após definir Object Name Prefix para a condição de retorno à origem.

      Origin URL

      Defina a primeira coluna como https, a segunda coluna como example.com e deixe a terceira coluna vazia.

      3xx Response

      Selecione Follow Origin to Redirect Request.

      Nota

      Se Follow Origin to Redirect Request não estiver selecionado, o OSS retorna o endereço de redirecionamento especificado pelo servidor de origem diretamente ao cliente.

    • Regra 2

      Parâmetro

      Configuração

      Method

      Selecione Image.

      Condition

      Selecione Object Name Prefix e defina como dir2/.

      Replace or Delete File Prefix

      Selecione Replace or Delete File Prefix e defina como example2/.

      Nota

      Esta opção é exibida somente após definir Object Name Prefix para a condição de retorno à origem.

      Origin URL

      Defina a primeira coluna como https, a segunda coluna como example.org e deixe a terceira coluna vazia.

      3xx Response

      Selecione Follow Origin to Redirect Request.

  5. Clique em OK.

Etapa 2: Verificar as regras

  1. Acesse https://bucket-02.oss-cn-beijing.aliyuncs.com/dir1/example.txt.

  2. Se o objeto example.txt não existir no diretório dir1 do bucket bucket-02, o OSS enviará uma solicitação para o objeto em https://example.com/example1/example.txt.

    • Se o Servidor de Origem A tiver uma regra de redirecionamento para example1/example.txt, o OSS enviará uma nova solicitação ao endereço redirecionado. Após buscar o objeto, o OSS o salva como dir1/example.txt no bucket bucket-02 e o retorna ao cliente.

    • Se o Servidor de Origem A não tiver uma regra de redirecionamento para example1/example.txt, o OSS busca o objeto, o salva como dir1/example.txt no bucket bucket-02 e o retorna ao cliente.

  3. Se um cliente solicitar https://bucket-02.oss-cn-beijing.aliyuncs.com/dir2/example.txt, o objeto buscado por meio da regra de retorno à origem por espelhamento será armazenado como dir2/example.txt no bucket bucket-02.

Buscar em um bucket privado e encaminhar parâmetros

Quando o servidor de origem é um bucket privado do OSS, é necessário configurar as permissões de acesso adequadas. Também pode ser necessário encaminhar parâmetros específicos da solicitação do cliente ao servidor de origem. Este caso de uso mostra como configurar o retorno à origem para um bucket privado do OSS e encaminhar parâmetros. Por exemplo, se você tem dois buckets na região China (Shanghai): bucket-03 (public-read) e bucket-04 (private), e deseja implementar o seguinte comportamento:

  • Quando um cliente solicita um objeto que não existe no diretório examplefolder do bucket bucket-03, o OSS busca o objeto no diretório examplefolder do bucket bucket-04.

  • O OSS transmite a query string da URL de solicitação ao servidor de origem.

  • O OSS transmite os cabeçalhos HTTP header1, header2 e header3 da solicitação ao servidor de origem.

Etapa 1: Configurar uma regra de retorno à origem por espelhamento

  1. Acesse a página Buckets e clique no nome do bucket desejado.

  2. No painel de navegação à esquerda, escolha Data Management > Mirroring-based Back-to-origin.

  3. Na página Mirroring-based Back-to-origin, clique em Create Rule.

  4. No painel Create Rule, configure os parâmetros necessários conforme descrito na tabela a seguir. Use os valores padrão para os demais parâmetros.

    Parâmetro

    Configuração

    Method

    Selecione Image.

    Condition

    Selecione Object Name Prefix e defina como examplefolder/.

    Origin Type

    Selecione Back-to-origin to Private OSS Bucket e, em seguida, selecione bucket-04 na lista suspensa Source Bucket.

    Após configurar esta opção, quando um cliente solicitar um objeto que não existe, o OSS usa a função padrão AliyunOSSMirrorDefaultRole para buscar os dados do bucket de origem privado especificado. Isso requer a permissão AliyunOSSReadOnlyAccess, que garante que o OSS só possa acessar os dados de origem no modo de leitura, sem poder modificá-los ou excluí-los.

    Para configurar o retorno à origem por espelhamento para um bucket privado do OSS, o usuário RAM deve ter a permissão ram:GetRole. Essa permissão é usada para verificar se a função AliyunOSSMirrorDefaultRole existe.

    • Se a função existir, ela será usada diretamente.

    • Se a função não existir, recomendamos usar a conta principal do Alibaba Cloud associada ao usuário RAM para criar a função AliyunOSSMirrorDefaultRole com antecedência e conceder a ela a permissão AliyunOSSReadOnlyAccess. Essa prática evita conceder permissões de alto risco, como criar funções (ram:CreateRole) e anexar políticas a funções (ram:AttachPolicyToRole), ao usuário RAM. Após a autorização da função, o usuário RAM pode reutilizar a função existente, o que reduz os riscos de configuração de permissões.

    Origin URL

    Defina a primeira coluna como https e deixe os demais campos vazios.

    Origin Parameter

    Selecione Transfer with Query String.

    O OSS transmite a query string da URL de solicitação ao servidor de origem.

    Set Transmission Rule of HTTP Header

    Selecione Transmit Specific HTTP Headers e adicione os cabeçalhos HTTP header1, header2 e header3. As regras de retorno à origem não suportam o encaminhamento de certos cabeçalhos HTTP padrão, como authorization, authorization2, range, content-length e date, ou quaisquer cabeçalhos que comecem com x-oss-, oss- ou x-drs-.

    Importante

    Ao buscar em um bucket privado, não selecione a opção para encaminhar todos os cabeçalhos HTTP. Isso causa falha na busca de retorno à origem.

  5. Clique em OK.

Etapa 2: Verificar a regra

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

  2. Se o objeto examplefolder/example.png não existir no bucket bucket-03, o OSS enviará uma solicitação para o objeto em https://bucket-04.oss-cn-shanghai.aliyuncs.com/examplefolder/example.png?caller=lucas&production=oss.

  3. O bucket bucket-04 retorna o objeto example.png ao OSS com base nos parâmetros encaminhados ?caller=lucas&production=oss.

  4. O OSS salva o objeto buscado como examplefolder/example.png no bucket bucket-03.

Se a solicitação também contiver os cabeçalhos HTTP header1, header2 e header3, o OSS também os transmitirá ao bucket bucket-04.

Casos de uso em produção

Migração de dados sem interrupção

Para mais informações sobre a solução de migração, consulte Migre serviços para o Alibaba Cloud OSS sem interrupção usando o retorno à origem por espelhamento.

Atualizar objetos em cache

O retorno à origem por espelhamento é um mecanismo de cache de uso único. Se um objeto no servidor de origem for atualizado, o OSS não o atualiza nem o busca novamente de forma automática. Você pode usar os seguintes métodos para atualizar manualmente os objetos em cache.

  • Exclusão manual: exclua o objeto do bucket do OSS usando o console ou uma API. Na próxima vez que o objeto for acessado, a regra de retorno à origem será acionada novamente.

  • Regras de ciclo de vida: configure uma política de expiração para os objetos espelhados. Eles serão excluídos automaticamente após um período especificado, possibilitando atualizações periódicas.

  • Versionamento de nomes de objetos: ao atualizar um objeto no servidor de origem, use um novo nome (por exemplo, style.v2.css). Esta é a abordagem recomendada para evitar problemas de cache.

Prevenção de riscos e tolerância a falhas

  • Carga do servidor de origem: garanta que o servidor de origem tenha largura de banda e capacidade de processamento suficientes para lidar com as solicitações de retorno à origem. Recomendamos monitorar a carga do servidor de origem e considerar o pré-aquecimento dos dados em horários de baixa demanda.

  • Controle de custos: para evitar custos inesperados, recomendamos configurar alertas de custo no Console de Gerenciamento do Alibaba Cloud para monitorar o volume de solicitações de retorno à origem.

  • Configuração de segurança: garanta que o servidor de origem esteja acessível ao OSS. Se a URL de origem usar o protocolo HTTPS, certifique-se de que o certificado do servidor de origem foi emitido por uma Autoridade Certificadora (CA) confiável, o nome de domínio corresponde e o certificado não expirou.

  • Consulta de logs: use o recurso de consulta de logs em tempo real para visualizar os logs relacionados ao retorno à origem. O User-Agent das solicitações de retorno à origem contém a string aliyun-oss-mirror.

Cotas e limites

  • Quantidade e ordem das regras: é possível configurar até 20 regras de retorno à origem para cada bucket. As regras são correspondidas em ordem crescente de seu RuleNumber. Uma vez correspondida uma regra, ela é executada e as regras subsequentes não são verificadas. É possível ajustar a prioridade de correspondência usando as opções Up ou Down ao lado de uma regra.

  • QPS e largura de banda:

    • Regiões na parte continental da China: o QPS total padrão é de 2.000 e a largura de banda total é de 2 Gbit/s.

    • Regiões fora da parte continental da China: o QPS total padrão é de 1.000 e a largura de banda total é de 1 Gbit/s.

    • Este limite se aplica à capacidade total de retorno à origem por espelhamento de todos os buckets pertencentes a uma única conta do Alibaba Cloud na região correspondente. As solicitações que excederem esse limite serão limitadas e um erro 503 será retornado. Para solicitar uma cota maior, entre em contato com a Technical Support.

  • Endereço do servidor de origem: o endereço deve ser um nome de domínio ou endereço IP publicamente acessível que esteja em conformidade com os padrões de codificação RFC 3986. Endereços de rede interna não são suportados.

  • Tempo limite: o tempo limite padrão para o retorno à origem por espelhamento é de 10 segundos.

  • Retorno à origem fragmentado: se o servidor de origem suportar solicitações de intervalo e você precisar do recurso de retorno à origem fragmentado, entre em contato com a Technical Support.

FAQ

Tamanho do objeto espelhado difere da origem

Se você encontrar uma discrepância de tamanho entre o objeto espelhado e o objeto de origem, siga estas etapas para investigar.

  1. Verifique os timestamps Last-Modified do objeto espelhado e do objeto de origem.

    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.")
    • Se o timestamp Last-Modified do arquivo de origem for maior que o timestamp Last-Modified do arquivo espelhado, isso indica que o arquivo de origem pode ter sido atualizado após a geração do arquivo espelhado.

      Nota

      Quando o OSS busca um objeto de um servidor de origem e o grava em um bucket, ele não preserva o timestamp Last-Modified do objeto de origem. Em vez disso, o OSS define o timestamp Last-Modified do objeto espelhado como o momento em que ele foi criado ou atualizado no OSS.

    • Se o timestamp Last-Modified do arquivo de origem for ≤ o timestamp Last-Modified do arquivo de retorno à origem por espelhamento, isso indica que o arquivo de origem não foi atualizado desde que o arquivo de retorno à origem foi gerado. A próxima etapa é verificar os valores de checksum MD5 ou CRC64 de ambos os arquivos.

  2. Compare os checksums MD5 ou CRC64 do objeto espelhado e do objeto de origem.

    # -*- 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}")
        
    • Se os checksums MD5 ou CRC64 forem idênticos, o conteúdo dos dois objetos é o mesmo. Nesse caso, seus tamanhos também devem ser idênticos.

    • Se os checksums MD5 ou CRC64 não coincidirem, o conteúdo dos dois objetos é diferente. Prossiga para a próxima etapa para verificar cabeçalhos de solicitação especiais.

  3. Verifique se há cabeçalhos de solicitação especiais.

    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
    • Verifique se a solicitação de retorno à origem contém cabeçalhos de solicitação HTTP especiais, como Accept-Encoding: gzip, deflate, br. Esse cabeçalho indica que o cliente pode aceitar dados compactados.

    • Se a solicitação de retorno à origem usar compactação HTTP e o objeto solicitado atender aos critérios de compactação, os tamanhos dos dois objetos serão diferentes.

    • Se o cabeçalho Accept-Encoding estiver presente, não o encaminhe.

      • Se você configurou a regra para encaminhar todos os cabeçalhos HTTP, adicione accept-encoding à lista de cabeçalhos proibidos.

      • Se você configurou a regra para encaminhar cabeçalhos HTTP específicos, certifique-se de que accept-encoding não esteja incluído na lista de cabeçalhos especificados.

        Selecione Transmit Specific HTTP Headers e adicione content-type no campo de entrada do parâmetro.

Solucionar falhas de retorno à origem

Se você encontrar uma falha na busca de origem (como um erro 424 MirrorFailed), siga as etapas abaixo para solucionar o problema.

  1. Verifique a acessibilidade do servidor de origem.

    # Replace the URL with your actual origin server address and file path
    curl -I "https://www.example.com/images/test.jpg"
  2. Verifique a resolução de DNS.

    # Replace the domain name with your actual origin domain name
    nslookup www.example.com
  3. Verifique o certificado HTTPS (se o servidor de origem usar HTTPS).

    # Replace the domain name with your actual origin domain name
    openssl s_client -connect www.example.com:443 -servername www.example.com
  4. Analise o problema usando o recurso de consulta de logs em tempo real do OSS.

Nenhum objeto espelhado criado

Uma solicitação HEAD do cliente recupera apenas os metadados do objeto, como tamanho e tipo, sem baixar o conteúdo. Portanto, as solicitações HEAD não acionam as regras de retorno à origem por espelhamento para buscar um objeto no servidor de origem e gravá-lo no bucket do OSS.

Código de status inesperado do retorno à origem

Quando uma solicitação aciona o retorno à origem por espelhamento e o servidor de origem retorna um código de status diferente de 404, 200 ou 206, analise a resposta do servidor de origem.

  • Origem é OSS: verifique os seguintes itens de configuração.

    • Proibir o encaminhamento de cabeçalhos HTTP específicos: proíba o encaminhamento do cabeçalho host para evitar a exposição de informações do servidor de origem e garantir que as solicitações de retorno à origem sejam processadas conforme esperado. Se você não proibir o encaminhamento do cabeçalho host, a solicitação de retorno à origem transmitirá o valor de host do bucket de destino ao servidor de origem. Como o valor de host de cada bucket é exclusivo, se o host solicitado não corresponder ao host real da origem, o servidor de origem retornará um erro 403. O OSS então retornará um erro 424 ao cliente.

    • Retorno à origem para um bucket privado do OSS: se as permissões não estiverem configuradas, verifique se o ACL do bucket de destino e de seus objetos está definido como public-read. Se as permissões estiverem configuradas, verifique se a política de autorização de função para o retorno à origem por espelhamento foi alterada, resultando em permissões insuficientes. A função padrão para o retorno à origem por espelhamento é AliyunOSSMirrorDefaultRole, e sua política de sistema padrão é AliyunOSSReadOnlyAccess.

  • Origem não é OSS: analise os logs do lado do servidor e verifique as configurações de Server Name Indication (SNI), parâmetros de retorno à origem e encaminhamento de cabeçalhos para identificar a causa específica do erro do servidor de origem. O servidor de origem pode retornar códigos de status como 401 (Unauthorized), 403 (Forbidden) ou um 5xx (Server Internal Error).

Ordem de correspondência das regras de retorno à origem

As regras são correspondidas com base no número da regra (RuleNumber) em ordem crescente. Após a primeira regra que atenda às condições ser correspondida, essa regra é executada imediatamente e nenhuma regra subsequente é verificada.

Buscar em uma VPC ou IP interno

Não. O servidor de origem deve ter um endereço publicamente acessível. Para acessar um serviço em uma VPC, exponha-o à internet pública usando um NAT Gateway ou uma instância SLB voltada para a internet.

Objeto OSS não atualizado após atualização da origem

O retorno à origem por espelhamento é um mecanismo de busca de uso único e não sincroniza automaticamente as atualizações do servidor de origem. Para buscar um objeto atualizado, exclua manualmente o objeto espelhado do OSS ou use uma estratégia de versionamento de nomes de objetos.