Hospedagem virtual de buckets - Amazon Simple Storage Service

Hospedagem virtual de buckets

Hospedagem virtual é a prática de atender vários sites a partir de um único servidor web. Uma maneira de diferenciar sites é usar o nome de host aparente da solicitação em vez de apenas a parte do nome do caminho do URI. Uma solicitação REST comum do Amazon S3 especifica um bucket usando o primeiro componente delimitado por barra do caminho do URI da solicitação. Ou você pode usar a hospedagem virtual do Amazon S3 para endereçar um bucket em uma chamada de API REST usando o cabeçalho Host HTTP. Na prática, o Amazon S3 interpreta Host como um aviso de que a maioria dos buckets é acessível automaticamente para tipos limitados de solicitações em https://bucketname.s3.Region.amazonaws.com. Para ver uma lista completa de regiões e endpoints do Amazon S3, consulte Regiões e endpoints do Amazon S3 na Referência geral da AWS.

Além disso, a hospedagem virtual tem outros benefícios. Ao nomear o bucket com o nome do domínio registrado e ao tornar esse nome um alias do DNS para o Amazon S3, você pode personalizar totalmente o URL dos recursos do Amazon S3, por exemplo, https://my.bucketname.com/. Você também pode publicar no “diretório raiz” do servidor virtual do bucket. Esta habilidade pode ser importante pois muitos aplicativos buscam arquivos nesse local padrão. Por exemplo, favicon.ico, robots.txt, crossdomain.xml serão todos encontrados na raiz.

Solicitações no estilo de caminho

Atualmente, o Amazon S3 é compatível com acesso virtual de estilo de hospedagem e de caminho em todas as regiões, mas isso mudará (consulte a nota Importante a seguir).

No Amazon S3, os URLs de estilo de caminho seguem o formato abaixo.

https://s3.Region.amazonaws.com/bucket-name/key name

Por exemplo, se você criar um bucket denominado mybucket na região Oeste dos EUA (Oregon) e quiser acessar o objeto puppy.jpg nele, use o seguinte URL de estilo de caminho:

https://s3.us-west-2.amazonaws.com/mybucket/puppy.jpg
Importante

Os buckets criados após 30 de setembro de 2020 serão compatíveis apenas com pedidos de hosted-estilo. Os pedidos de caminho-estilo continuarão sendo compatíveis para buckets criados nessa data ou após ela. Para mais informações, consulte Plano de substituição do caminho do Amazon S3 – O resto da história.

Solicitações no estilo de hospedagem virtual

Em um URI no estilo de hospedagem virtual, o nome do bucket faz parte do nome do domínio no URL.

Os URLs de estilo de hospedagem virtual do Amazon S3 seguem o formato abaixo.

https://bucket-name.s3.Region.amazonaws.com/key name

Neste exemplo, my-bucket é o nome do bucket, Oeste dos EUA (Oregon) é a região, e puppy.png é o nome da chave.

https://my-bucket.s3.us-west-2.amazonaws.com/puppy.png

Especificação de bucket do cabeçalho de host HTTP

Desde que a solicitação GET não use o endpoint SSL, você pode especificar o bucket para a solicitação usando o cabeçalho Host HTTP. O cabeçalho Host em uma solicitação REST é interpretado da seguinte forma:

  • Se o cabeçalho Host estiver omitido ou se o seu valor for "s3.Region.amazonaws.com", o bucket para a solicitação será o primeiro componente delimitado por barra no URI da solicitação e a chave da solicitação será o restante do URI. Este é o método comum, conforme ilustrado pelos dois primeiros exemplos desta seção. Omitir o cabeçalho Host é válido apenas para solicitações HTTP 1.0.

  • Caso contrário, se o valor do cabeçalho Host terminar com ".s3.Region.amazonaws.com", o nome do bucket será o componente inicial do valor do cabeçalho Host até .s3.Region.amazonaws.com. A chave da solicitação será o seu URI. Essa interpretação expõe buckets como subdomínios do .s3.Region.amazonaws.com, conforme ilustrado pelo terceiro e pelo quarto exemplos nesta seção.

  • Caso contrário, o bucket da solicitação é o valor em letras minúsculas do cabeçalho Host, e a chave da solicitação é o seu URI. Essa interpretação é útil se você tiver registrado o mesmo nome DNS que o nome do bucket e se tiver configurado o nome para ser um alias CNAME para o Amazon S3. O procedimento para registrar nomes de domínios e configurar o DNS está além do escopo deste guia, mas o resultado é ilustrado pelo último exemplo desta seção.

Exemplos

Esta seção fornece exemplos de URLs e solicitações.

exemplo Estilo de caminho

Este exemplo usa o seguinte:

  • Nome do bucket ‐ awsexamplebucket1.net

  • Região – Leste dos EUA (Norte da Virgínia)

  • Nome da chave – homepage.html

O URL é o seguinte:

https://s3.us-east-1.amazonaws.com/awsexamplebucket1.net/homepage.html

A solicitação é a seguinte:

GET /awsexamplebucket1.net/homepage.html HTTP/1.1 Host: s3.us-east-1.amazonaws.com

A solicitação com HTTP 1.0 e a omissão do cabeçalho host é a seguinte:

GET /awsexamplebucket1.net/homepage.html HTTP/1.0

Para obter informações sobre nomes compatíveis do DNS, consulte Limitações. Para obter mais informações sobre chaves, consulte Chaves.

exemplo Estilo de hospedagem virtual

Este exemplo usa o seguinte:

  • Nome do bucket ‐ awsexamplebucket1.eu

  • Região – Europa (Irlanda)

  • Nome da chave – homepage.html

O URL é o seguinte:

https://awsexamplebucket1.eu.s3.eu-west-1.amazonaws.com/homepage.html

A solicitação é a seguinte:

GET /homepage.html HTTP/1.1 Host: awsexamplebucket1.eu.s3.eu-west-1.amazonaws.com

exemplo Método CNAME

Para usar este método, é necessário configurar o nome de DNS como um alias CNAME para bucketname.s3.us-east-1.amazonaws.com. Para obter mais informações, consulte Personalizar URLs do Amazon S3 com CNAMEs. Este exemplo usa o seguinte:

  • Nome do bucket ‐ awsexamplebucket1.net

  • Nome da chave – homepage.html

O URL é o seguinte:

https://www.awsexamplebucket1.net/homepage.html

O exemplo é o seguinte:

GET /homepage.html HTTP/1.1 Host: www.awsexamplebucket1.net

Personalizar URLs do Amazon S3 com CNAMEs

Dependendo da necessidade, é possível que você não queira que s3.Region.amazonaws.com apareça no site ou serviço. Por exemplo, se você estiver hospedando as imagens do site no Amazon S3, talvez prefira https://images.awsexamplebucket1.net/ em vez de https://awsexamplebucket1-images.s3.us-east-1.amazonaws.com/. Qualquer bucket com um nome compatível com o DNS pode ser mencionado da seguinte forma: https://BucketName.s3.Region.amazonaws.com/[Filename], por exemplo, https://images.awsexamplebucket1.net.s3.us-east-1.amazonaws.com/mydog.jpg. Ao usar o CNAME, mapeie images.awsexamplebucket1.net para um nome de host do Amazon S3, para que o URL anterior se torne https://images.awsexamplebucket1.net/mydog.jpg.

O nome do bucket deve ser o mesmo que o CNAME. Por exemplo, se você criar um CNAME para mapear images.awsexamplebucket1.net para images.awsexamplebucket1.net.s3.amazonaws.com, https://images.awsexamplebucket1.net/filename e https://images.awsexamplebucket1.net.s3.us-east-1.amazonaws.com/filename serão o mesmo.

O registro DNS do CNAME deve apelidar o nome do domínio para o nome de host apropriado do estilo hospedagem virtual. Por exemplo, se o nome do bucket e o nome do domínio forem images.awsexamplebucket1.net e o bucket estiver na Região Leste dos EUA (Norte da Virgínia), o alias do registro do CNAME deverá ser images.awsexamplebucket1.net.s3.us-east-1.amazonaws.com.

images.awsexamplebucket1.net CNAME images.awsexamplebucket1.net.s3.us-east-1.amazonaws.com.

O Amazon S3 usa o nome de host para determinar o nome do bucket. O nome do CNAME e o nome do bucket devem ser os mesmos. Por exemplo, suponha que você tenha configurado www.example.com como um CNAME para www.example.com.s3.us-east-1.amazonaws.com. Quando você acessa https://www.example.com, o Amazon S3 recebe uma solicitação semelhante à seguinte:

GET / HTTP/1.1 Host: www.example.com Date: date Authorization: signatureValue

O Amazon S3 vê somente o nome de host original www.example.com e não está ciente do mapeamento CNAME usado para resolver a solicitação.

Qualquer endpoint do Amazon S3 pode ser usado em um CNAME. Por exemplo, s3.ap-southeast-1.amazonaws.com pode ser usado em CNAMEs. Para obter mais informações sobre endpoints, consulte Endpoints de solicitações.

Para associar um nome de host a um bucket do Amazon S3 usando CNAMEs

  1. Selecione um nome de host que pertença a um domínio controlado por você.

    Este exemplo usa o subdomínio images do domínio awsexamplebucket1.net.

  2. Crie um bucket que corresponda ao nome de host.

    Neste exemplo, os nomes de host e do bucket são images.awsexamplebucket1.net. O nome do bucket deve ser exatamente igual ao nome de host.

  3. Crie um registro do CNAME que define o nome de host como um alias para o bucket do Amazon S3.

    Por exemplo:

    images.awsexamplebucket1.net CNAME images.awsexamplebucket1.net.s3.us-west-2.amazonaws.com

    Importante

    Por questões de encaminhamento de solicitações, o registro do CNAME deve estar definido exatamente como mostrado no exemplo anterior. Caso contrário, ele pode parecer operar de maneira correta, mas, eventualmente, resultará em um comportamento imprevisível.

    O procedimento para configurar o DNS depende do servidor DNS ou do provedor DNS. Para obter informações específicas, consulte a documentação do servidor ou entre em contato com o provedor.

Limitações

SSL

Os URLs de hospedagem virtual são compatíveis apenas com solicitações sem SSL (HTTP) Ao usar buckets no estilo de hospedagem virtual com SSL, o certificado curinga SSL corresponde apenas a buckets que não contêm pontos. Para contornar isso, use HTTP ou escreva a sua própria lógica de verificação do certificado.

SOAP

O suporte de SOAP via HTTP está obsoleto, mas continua disponível via HTTPS. Novos recursos do Amazon S3 não serão compatíveis com o SOAP. Recomendamos que você use a API REST ou os SDKs da AWS.

Compatibilidade retroativa

Endpoints legados

Algumas regiões oferecem suporte a endpoints legados. Você pode ver esses endpoints nos logs de acesso do servidor ou nos logs do CloudTrail. Para obter mais informações, revise as informações abaixo. Para ver uma lista completa de regiões e endpoints do Amazon S3, consulte Regiões e endpoints do Amazon S3 na Referência geral da AWS.

Importante

Embora você possa ver endpoints legados nos seus logs, recomendamos que você sempre use a sintaxe do endpoint padrão para acessar os buckets.

Os URLs de estilo de hospedagem virtual do Amazon S3 seguem o formato abaixo.

https://bucket-name.s3.Region.amazonaws.com/key name

No Amazon S3, os URLs de estilo de caminho seguem o formato abaixo.

https://s3.Region.amazonaws.com/bucket-name/key name

s3‐Region

Algumas regiões mais antigas do Amazon S3 oferecem suporte a endpoints que contêm um traço entre o S3 e a região (por exemplo, S3‐us-west-2), em vez de um ponto (por exemplo, S3.us-west-2). Se o bucket estiver em uma dessas regiões, você poderá ver o seguinte formato de endpoint nos logs de acesso ao servidor ou nos logs do CloudTrail:

https://bucket-name.s3-Region.amazonaws.com

Neste exemplo, o nome do bucket é my-bucket e a região é Oeste dos EUA (Oregon):

https://my-bucket.s3-us-west-2.amazonaws.com

Endpoint global legado

Para algumas regiões, o endpoint global legado pode ser usado para construir solicitações que não especificam um endpoint específico da região. A seguir, o endpoint global legado:

bucket-name.s3.amazonaws.com

Nos logs de acesso ao servidor ou nos logs do CloudTrail, você poderá ver solicitações que usam o endpoint global legado. Neste exemplo, o nome do bucket é my-bucket e o endpoint global legado é exibido:

https://my-bucket.amazonaws.com

Solicitações no estilo de hospedagem virtual para Leste dos EUA (Norte da Virgínia)

As solicitações feitas com o endpoint global legado vão, por padrão, para o Leste dos EUA (Norte da Virgínia). Portanto, o endpoint global legado às vezes é usado no lugar do endpoint regional para Leste dos EUA (Norte da Virgínia). Se você criar um bucket Leste dos EUA (Norte da Virgínia) e usar o endpoint global, o Amazon S3 roteará sua solicitação para essa região por padrão.

Solicitações no estilo de hospedagem virtual para outras regiões

O endpoint global legado também é usado para solicitações no estilo de hospedagem virtual em outras regiões compatíveis. Se você criar um bucket em uma região lançada antes de 20 de março de 2019 e usar o endpoint global legado, o Amazon S3 atualizará o DNS para rotear a solicitação para o local correto, o que pode levar algum tempo. Enquanto isso, as regras padrão se aplicam e a solicitação no estilo de hospedagem virtual vai para a região Leste dos EUA (Norte da Virgínia), e o Amazon S3 a redireciona para a região correta com HTTP 307. Para buckets do S3 em regiões lançadas após 20 de março de 2019, o DNS não roteia a solicitação diretamente à região da AWS na qual o bucket reside. Em vez disso, ele retorna um erro de solicitação incorreta HTTP 400. Para obter mais informações, consulte Redirecionamento de solicitação e a API REST.

Solicitações no estilo de caminho

Para a região Leste dos EUA (Norte da Virgínia), o endpoint global legado pode ser usado para solicitações no estilo de caminho.

Para todas as outras regiões, a sintaxe de caminho exige usar o endpoint específico da região ao tentar acessar um bucket. Se você tentar acessar um bucket com o endpoint global legado ou outro endpoint diferente daquele para a região onde reside o bucket, você receberá um erro de redirecionamento temporário com código 307 de resposta HTTP e uma mensagem indicando o URI correto para o seu recurso. Por exemplo, se você usar https://s3.amazonaws.com/bucket-name para um bucket criado na região Oeste dos EUA (Oregon), você receberá um erro de redirecionamento temporário HTTP 307.