Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda> Object Storage Service> Guia de usuário> Hospedagem de site estático
Atualizado em 2022-11-24 GMT+08:00

Hospedagem de site estático

Precauções

Para fins de segurança e conformidade, usando a hospedagem de sites estáticos por meio do nome de domínio padrão do OBS (nome de domínio do bucket ou nome de domínio do site estático) serão proibidos por OBS. Quando você usa esse nome de domínio para acessar páginas da web por meio de um navegador, nenhum conteúdo será exibido; em vez disso, o conteúdo será baixado como um anexo.

Esta proibição entrará em vigor em diferentes regiões nos dois momentos seguintes:

1 de janeiro de 2022: CN North-Beijing1, CN North-Beijing4, CN East-Shanghai1, CN East-Shanghai2, e CN South-Guangzhou

25 de março de 2022: CN-Hong Kong, AP-Bangkok, AP-Singapore, AF-Johannesburg, LA-Mexico City1, LA-Mexico City2, LA-Sao Paulo1, e LA-Santiago

Você ainda pode usar a hospedagem de sites estáticos por meio de um nome de domínio definido pelo usuário. Dessa forma, o conteúdo ainda pode ser visualizado. Para obter detalhes, consulte Como faço para visualizar objetos no OBS através de um navegador?

Cenário de aplicação

Você pode usar OBS para hospedar seu site estático, para o qual também pode configurar um documento de índice, um documento de erro e a direção da página. Você pode carregar os arquivos de conteúdo do site estático para o bucket no OBS e configurar uma permissão de leitura para usuários anônimos para esses arquivos e, em seguida, configurar o modo de hospedagem de site estático para o bucket hospedar seus sites estáticos no OBS.

Sites estáticos contêm páginas da web estáticas e alguns scripts que podem ser executados em clientes, como JavaScript e Flash. Diferente de sites estáticos, sites dinâmicos contam com servidores para processar scripts, incluindo PHP, JSP e ASP.NET. OBS não suporta scripts executados em servidores.

Figura 1 Hospedagem de site estático

Depois que a hospedagem de sites estáticos estiver ativada, você poderá acessar objetos em um bucket usando um dos seguintes métodos:

  • Gestão de recursos: Você pode acessar objetos em um bucket por meio de um nome de domínio comum. Você pode usar as API ou os SDK e nomes de domínio padrão do OBS com endpoints contidos para executar operações comuns em buckets e objetos, como upload, download, exclusão e listagem.
  • Site estático: Você pode acessar objetos em um bucket usando um nome de domínio específico. Neste modo, a exibição da página de índice, páginas de erro e páginas solicitadas é implementada de acordo com as regras de hospedagem de nomes de domínio estáticos configuradas.

A configuração da hospedagem estática do site entra em vigor em dois minutos. Depois que ele entrar em vigor, você poderá acessar recursos estáticos usando os seguintes nomes de domínio de acesso:

https://bucketname.OBS static website hosting domain name/Object name
http://bucketname.OBS static website hosting domain name/Object name

Evite usar (.) de períodos no nome do bucket de destino. Caso contrário, falhas no certificado de autenticação do cliente podem ocorrer quando os usuários usam HTTPS para acesso.

Para permitir que seus clientes acessem o conteúdo no nó do terminal do site, você deve tornar todo o seu conteúdo público e acessível. Você pode usar políticas de bucket ou ACL em objetos para conceder permissões.

A tabela a seguir lista as diferenças entre o modo de gerenciamento de recursos e o modo de site estático.

Diferença principal

Gestão de recursos

Site estático

Controle de acesso

Tanto o conteúdo público quanto o conteúdo privado são suportados.

Somente o conteúdo público é suportado.

Processamento de mensagem de erro

Uma resposta de erro no formato XML é retornada.

Um documento HTML é retornado.

Suporte ao redirecionamento

N/A

Tanto o redirecionamento no nível do objeto quanto o no nível do bucket são suportados.

Solicitação suportada

Operações em todos os buckets e objetos são suportadas.

Somente solicitações GET e HEAD em objetos são suportadas.

Resposta a solicitações GET e HEAD do nível raiz do bucket

A lista de chaves de objeto em um bucket é retornada.

O arquivo de índice especificado na configuração é retornado.

Visão geral do redirecionamento

Ao usar a hospedagem de sites estáticos, você pode configurar o redirecionamento para redirecionar solicitações específicas ou todas.

Se a estrutura, endereço ou extensão de nome de arquivo de um site for alterada, os usuários não conseguirão acessar o site usando o endereço antigo. (como o endereço salvo na pasta de favoritos) e a mensagem de erro 404 será retornada. Nesse caso, você pode configurar o redirecionamento do site para redirecionar as solicitações de acesso do usuário para a página especificada, em vez de retornar a página de erro 404.

As configurações típicas incluem:

  • Redirecionamento de todas as solicitações para outro site.
  • Redirecionamento de solicitações específicas com base em regras de redirecionamento.

Configuração da hospedagem de site estático

Visão geral

Se você quiser usar um bucket para hospedar sites estáticos, adicione a configuração do site ao bucket. A configuração inclui as seguintes informações:

Documento de índice

Quando você insere uma URL como http://example.com, você não está solicitando uma página específica. Nesse caso, o servidor web fornecerá uma página padrão que contém o diretório que armazena o conteúdo do site solicitado. Essa página padrão é chamada de documento de índice e, na maioria dos casos, é nomeada como index.html. Ao configurar um bucket para hospedagem de sites, você deve especificar um documento de índice. Quando uma solicitação é enviada para o domínio raiz ou qualquer subpasta, OBS retorna esse documento de índice.

Documento de erro

Se ocorrer um erro, OBS retornará um documento de erro de HTML. Para erros 4XX, você pode fornecer seu próprio documento de erro personalizado ou fornecer outros guias para seus usuários neste documento.

Redirecionamento de todas as solicitações

Se o domínio raiz for example.com e você precisar responder a solicitações de http://example.com e http://www.example.com, poderá criar dois buckets denominados example.com e www.example.com. Em seguida, você pode manter o conteúdo do site em apenas um bucket (como example.com) e configurar o outro bucket para redirecionar todas as solicitações para o bucket example.com.

Redirecionamento baseado em condições avançadas

Você pode redirecionar solicitações com base no nome ou prefixo do objeto específico na solicitação ou com base no código de resposta. Por exemplo, suponha que você exclua ou renomeie um objeto em um bucket. Você pode adicionar uma regra de roteamento que redireciona solicitações para outros objetos.

O formato de sintaxe é o seguinte, definindo regras de redirecionamento de solicitações específicas:

<WebsiteConfiguration> 
    <IndexDocument> 
        <Suffix>index.html</Suffix></IndexDocument> 
    <ErrorDocument> 
        <Key>SomeErrorDocument.html</Key> 
    </ErrorDocument> 
    <RoutingRules> 
              RoutingRules……
    </RoutingRules> 
</WebsiteConfiguration>

O formato de sintaxe do RoutingRules é o seguinte. O conteúdo entre colchetes é opcional.

<RoutingRules> = 
    <RoutingRules> 
        <RoutingRule>...</RoutingRule> 
        [<RoutingRule>...</RoutingRule> ...] 
    </RoutingRules> 

<RoutingRule> = 
    <RoutingRule> 
        [ <Condition>...</Condition> ] 
        <Redirect>...</Redirect> 
    </RoutingRule> 

<Condition> = 
    <Condition>  
        [ <KeyPrefixEquals>...</KeyPrefixEquals> ] 
        [ <HttpErrorCodeReturnedEquals>...</HttpErrorCodeReturnedEquals> ] 
    </Condition> 

<Redirect> = 
    <Redirect> 
        [ <HostName>...</HostName> ] 
        [ <Protocol>...</Protocol> ] 
        [ <ReplaceKeyPrefixWith>...</ReplaceKeyPrefixWith> ] 
        [ <ReplaceKeyWith>...</ReplaceKeyWith> ][ 
        <HttpRedirectCode>...</HttpRedirectCode> ] 
    </Redirect>

Para elementos de solicitação necessários para redirecionar todas as solicitações enviadas a um site especificado e para definir regras de redirecionamento, consulte Configuração da hospedagem de sites estáticos para um bucket – elementos de solicitação

Exemplos:

Exemplo 1: Modificação do prefixo do nome do objeto para redirecionamento

Suponha que o bucket contém os seguintes objetos:

index.html

docs/article1.html

docs/article2.html

Você decide mudar o nome da pasta de docs/ para documents/. Após a modificação, a solicitação de um objeto com prefixo /docs precisa ser redirecionada para outro com documents/. Por exemplo, a solicitação para docs/article1.html precisa ser redirecionada para documents/article1.html.

Nesse caso, você pode adicionar as seguintes regras de roteamento à configuração do site:

 <RoutingRules> 
    <RoutingRule> 
    <Condition> 
      <KeyPrefixEquals>docs/</KeyPrefixEquals> 
    </Condition> 
    <Redirect> 
      <ReplaceKeyPrefixWith>documents/</ReplaceKeyPrefixWith> 
    </Redirect> 
    </RoutingRule> 
  </RoutingRules>

Exemplo 2: Redirecionamento de solicitações enviadas para pastas excluídas para uma página especificada

Suponha que você tenha excluído a pasta images/, ou seja, você tenha excluído todos os objetos cujo prefixo do nome do objeto é images/. Você pode adicionar uma regra de roteamento que redireciona as solicitações de todos os objetos cujo prefixo é images/ para a página chamada folderdeleted.html.

<RoutingRules> 
    <RoutingRule> 
    <Condition> 
       <KeyPrefixEquals>images/</KeyPrefixEquals> 
    </Condition> 
    <Redirect> 
      <ReplaceKeyWith>folderdeleted.html</ReplaceKeyWith> 
    </Redirect> 
    </RoutingRule> 
  </RoutingRules>

Exemplo 3: Redirecionamento quando ocorrem erros HTTP

Suponha que o objeto solicitado não é encontrado, e a solicitação precisa ser redirecionada para www.example.com. Você pode adicionar regras de redirecionamento para que os visitantes possam redirecionar para www.example.com quando o código de status de HTTP 404 (não encontrado) for retornado. O exemplo a seguir também insere o prefixo de nome de objeto report-404/ no redirecionamento. Por exemplo, se você solicitar a página ExamplePage.html e causar um erro HTTP 404, a solicitação será redirecionada para a página report-404/ExamplePage.html no www.example.com. Se não houver nenhuma regra de roteamento e ocorrer um erro de HTTP 404, o documento de erro especificado na configuração será retornado.

<RoutingRules> 
    <RoutingRule> 
    <Condition> 
      <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals > 
    </Condition> 
    <Redirect> 
      <HostName>www.example.com</HostName> 
      <ReplaceKeyPrefixWith>report-404/</ReplaceKeyPrefixWith> 
    </Redirect> 
    </RoutingRule> 
  </RoutingRules>

Suporte a documentos de índice

Um documento de índice é uma página da web retornada quando uma solicitação é enviada para a raiz de um site ou qualquer subpasta. Por exemplo, se o usuário inserir http://www.example.com no navegador, o usuário não solicitará nenhuma página específica. Nesse caso, OBS fornece documentos de índice, que às vezes são chamados de páginas padrão.

Ao configurar seu bucket como um site, forneça o nome do documento de índice. Você deve carregar o objeto com esse nome e configurá-lo para ser público e acessível.

A barra de rastreamento no URL raiz é opcional. Por exemplo, se você configurar um site index.html como um documento de índice, index.html será retornado para qualquer um dos seguintes os URL:

http://bucketname.obs-website.example.com/
http://bucketname.obs-website.example.com

No OBS, os objetos são armazenados horizontalmente em buckets. Ele não fornece nenhuma organização hierárquica como um sistema de arquivos em um computador. Você pode criar uma hierarquia lógica usando o nome do objeto que representa a estrutura de pastas. Por exemplo, considere um bucket com três objetos e os seguintes nomes de objetos.

  • sample1.jpg
  • photos/2006/Jan/sample2.jpg
  • photos/2006/Feb/sample3.jpg

Embora eles não sejam armazenados como qualquer organização hierárquica física, você pode inferir a seguinte estrutura de pasta lógica a partir do nome do objeto.

  • O objeto sample1.jpg está localizado no nível raiz do bucket.
  • O objeto sample2.jpg está localizado na subpasta photos/2006/Jan.
  • O objeto sample3.jpg está localizado na subpasta photos/2006/Feb .

Suporte a documentos de erros personalizados

Tabela 1 lista o subconjunto do código de resposta de HTTP retornado pelo OBS quando ocorre um erro.

Tabela 1 Lista de códigos de erro de OBS

Código de erro de HTTP

Descrição

301 Moved Permanently

Quando um usuário envia uma solicitação para um endpoint de OBS, uma resposta 301 Moved Permanently é retornada.

302 Found

Quando o OBS recebe uma solicitação para a chave x que não termina com uma barra, ele procura o objeto cujo nome da chave é x. Se o objeto não for encontrado, o OBS determina que a solicitação é enviada para a subpasta x. Em seguida, o OBS redireciona a solicitação adicionando uma barra no final da solicitação e retorna 302 Found.

304 Not Modified

Os usuários do OBS solicitam os cabeçalhos If-Modified-Since e If-Unmodified-Since para determinar se o objeto solicitado é o mesmo que a cópia armazenada em cache no cliente. Se os objetos forem os mesmos, o nó do terminal do site retorna uma resposta 304 Not Modified .

403 Forbidden

Quando a solicitação do usuário é convertida em um objeto que não pode ser lido publicamente, a resposta do nó do terminal do site inclui 403 Forbidden. O proprietário do objeto deve usar políticas de bucket ou ACL para tornar o objeto público e acessível.

404 Not Found

A resposta do nó do terminal do site contém 404 Not Found devido aos seguintes motivos:

  • O OBS determina que uma chave de objeto inválida é referenciada no URL do site.
  • O OBS determina que a solicitação é para um documento de índice que não existe.
  • O bucket especificado no URL não existe.
  • O bucket especificado no URL existe, mas não está configurado como um site.

Você pode criar documentos personalizados retornados para 404 Not Found. Certifique-se de que o documento foi carregado no bucket configurado como um site e que a configuração de hospedagem do site foi definida para usar o documento.

500 Service Error

Quando ocorre um erro de servidor interno, a resposta do nó do terminal do site contém 500 Service Error.

503 Service Unavailable

Quando o OBS determina que você precisa reduzir a freqüência de solicitação, a resposta do nó do terminal do site contém 503 Service Unavailable.

Permissões necessárias para acesso ao site

Ao configurar um bucket como um site, você deve tornar o objeto a ser fornecido público e acessível. Para executar essa operação, você precisa escrever uma política de bucket que conceda permissões de GetObject a todos. Se o objeto solicitado pelo usuário não existir no nó terminal do site, OBS retornará o código de resposta de HTTP 404 Not Found. Se o objeto existir, mas você não conceder permissão de leitura para o objeto, o nó do terminal do site retornará o código de resposta HTTP 403 Access Denied. Você pode usar esse código de resposta para inferir se um objeto específico existe. Se você não precisar dessa função, não habilite o suporte ao site do bucket.

No cenário de hospedagem de sites estáticos, os usuários anônimos devem ter acesso ao arquivo de site estático hospedado. Durante seu acesso ao arquivo hospedado, taxas para o tráfego de Internet de saída e solicitações serão incorridas.

A política de bucket de exemplo a seguir concede a cada pessoa a permissão para acessar objetos em uma pasta especificada. Para obter mais informações sobre políticas de bucket, consulte Política de bucket.

{ 
   "Statement":[{ 
    "Sid":"PublicReadGetObject", 
      "Effect":"Allow", 
      "Principal": {"ID":"*"}, 
      "Action":["GetObject"], 
      "Resource":["example-bucket/*"  ] 
    } 
  ] 
}

Uma política de bucket se aplica somente a objetos de propriedade de um proprietário de bucket. Se o bucket contiver objetos que não são de propriedade do proprietário do bucket, use ACL de objeto para conceder a permissão de leitura pública aos objetos.

Você pode usar políticas de bucket ou ACL de objeto para conceder permissões de leitura pública aos seus objetos. Para usar ACL para tornar objetos públicos e acessíveis, você pode conceder a permissão de leitura a todos, conforme mostrado nos seguintes elementos de autorização. Você pode adicionar o elemento de autorização às ACL de objeto. Para obter mais informações sobre como gerenciar os ACL, consulte ACL.

<Grant> 
  <Grantee> 
    <Canned>Everyone</Canned> 
  </Grantee> 
  <Permission>READ</Permission> 
</Grant>

Funções relacionadas

Função

Descrição do relacionamento

Referência

CORS

Por padrão, os sites estáticos hospedados em um bucket do OBS só podem responder a solicitações de acesso de sites no mesmo domínio. Você pode configurar o compartilhamento de recursos de origem cruzada (CORS) para o bucket para que os sites estáticos possam ser acessados por solicitações entre domínios.

CORS

Vinculação de nome de domínio definido pelo usuário

OBS permite que você use um nome de domínio definido pelo usuário para acessar sites estáticos hospedados em um bucket do OBS. Você pode usar o nome de domínio original para acessar o site sem modificar o código do site.

Vinculação de nome de domínio definido pelo usuário

Uso de um nome de domínio definido pelo usuário para hospedar um site estático

Validação de URL

OBS usa validação de URL para impedir que seus sites hospedados em um bucket de OBS sejam roubados. OBS verifica os URL com base no campo de referência no cabeçalho de HTTP.

Validação de URL

Como usar essa função

Você pode usar console do OBS, as API, ou os SDK para configurar CORS.

Ferramenta

Referência

Console de OBS

Configuração da hospedagem de website estático

SDK

OBS suporta kits de desenvolvimento de software (os SDK) em vários idiomas. Para obter detalhes, consulte o guia do desenvolvedor correspondente na página Visão geral de SDK.

API

Configuração da hospedagem de website estático para um bucket