Amazon Simple Storage Service
Guia do desenvolvedor (Versão da API 2006-03-01)

Hospedagem virtual de buckets

Em geral, 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 http://bucketname.s3.amazonaws.com. Além disso, 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, http://my.bucketname.com/.

Além do poder atrativo dos URLs personalizados, um segundo benefício da hospedagem virtual é a habilidade de publicação 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.

Atualmente, o Amazon S3 é compatível com acesso virtual hosted-estilo e caminho-estilo em todas as Regiões, mas isto irá mudar (consulte a nota Importante a seguir). A sintaxe de caminho-estilo exige usar o endpoint específico da região ao tentar acessar um bucket. Por exemplo, se houver um bucket chamado mybucket que resida na Região UE (Irlanda), se você quiser usar a sintaxe de caminho-estilo e o objeto for chamado puppy.jpg, o URI correto será http://s3-eu-west-1.amazonaws.com/mybucket/puppy.jpg.

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, caso tente acessar um bucket fora da região Leste dos EUA (N. Virginia) com sintaxe de caminho-estilo que use qualquer um dos seguintes:

  • http://s3.amazonaws.com

  • Um endpoint para uma região diferente daquela na qual o bucket reside. Por exemplo, se você usar http://s3-us-west-1.amazonaws.com para um bucket que foi criado na região Oeste dos EUA (Norte da Califórnia).

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.

Se você usar o endpoint Leste dos EUA (Norte da Virgínia) (s3.amazonaws.com), em vez do endpoint específico da região (por exemplo, s3-us-west-1.amazonaws.com), o Amazon S3 roteará qualquer solicitação hospedada virtualmente para a região Leste dos EUA (Norte da Virgínia) por padrão. Quando você cria um bucket em qualquer região lançada até 20 de março de 2019, o Amazon S3 atualiza o DNS para rotear novamente 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 hospedada virtualmente vai para a região Leste dos EUA (Norte da Virgínia), e o Amazon S3a 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.

Ao usar bucket hospedados virtualmente 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.

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.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.amazonaws.com", o nome do bucket será o componente inicial do valor do cabeçalho Host até ".s3.amazonaws.com". A chave da solicitação será o seu URI. Essa interpretação expõe buckets como subdomínios do s3.amazonaws.com, conforme ilustrado pelos exemplos 3 e 4 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 Método de estilo de caminho

Este exemplo usa johnsmith.net como nome do bucket e homepage.html como nome da chave.

O URL é o seguinte:

http://s3.amazonaws.com/johnsmith.net/homepage.html

A solicitação é a seguinte:

GET /johnsmith.net/homepage.html HTTP/1.1 Host: s3.amazonaws.com

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

GET /johnsmith.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 Método do estilo hospedagem virtual

Este exemplo usa johnsmith.net como nome do bucket e homepage.html como nome da chave.

O URL é o seguinte:

http://johnsmith.net.s3.amazonaws.com/homepage.html

A solicitação é a seguinte:

GET /homepage.html HTTP/1.1 Host: johnsmith.net.s3.amazonaws.com

O método do estilo hospedagem virtual requer que o nome do bucket esteja em conformidade com o DNS.

exemplo Método do estilo hospedagem virtual para um bucket que não esteja na região Leste dos EUA (Norte da Virgínia)

Este exemplo usa johnsmith.eu como nome do bucket na região UE (Irlanda) e homepage.html como nome da chave.

O URL é o seguinte:

http://johnsmith.eu.s3-eu-west-1.amazonaws.com/homepage.html

A solicitação é a seguinte:

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

Em vez de usar o endpoint específico para a região, também é possível usar o endpoint da região Leste dos EUA (Norte da Virgínia), não importando a região de residência do bucket.

http://johnsmith.eu.s3.amazonaws.com/homepage.html

A solicitação é a seguinte:

GET /homepage.html HTTP/1.1 Host: johnsmith.eu.s3.amazonaws.com

exemplo Método CNAME

Este exemplo usa www.johnsmith.net como nome do bucket e homepage.html como nome da chave. Para usar este método, é necessário configurar o nome de DNS como um alias CNAME para bucketname.s3.amazonaws.com.

O URL é o seguinte:

http://www.johnsmith.net/homepage.html

O exemplo é o seguinte:

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

Personalizar URLs do Amazon S3 com CNAMEs

Dependendo da necessidade, é possível que você não queira que "s3.amazonaws.com" apareça no site ou serviço. Por exemplo, se você hospedar as imagens do site no Amazon S3, talvez prefira http://images.johnsmith.net/ em vez de http://johnsmith-images.s3.amazonaws.com/.

O nome do bucket deve ser o mesmo que o CNAME. Portanto, http://images.johnsmith.net/filename seria o mesmo que http://images.johnsmith.net.s3.amazonaws.com/filename se um CNAME fosse criado para mapear images.johnsmith.net para images.johnsmith.net.s3.amazonaws.com.

Qualquer bucket com um nome compatível com o DNS pode ser mencionado da seguinte forma: http://[BucketName].s3.amazonaws.com/[Filename], por exemplo, http://images.johnsmith.net.s3.amazonaws.com/mydog.jpg. Ao usar o CNAME, mapeie images.johnsmith.net para um nome de host do Amazon S3 para que o URL anterior se torne http://images.johnsmith.net/mydog.jpg.

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 são images.johnsmith.net, o alias do registro do CNAME deve ser images.johnsmith.net.s3.amazonaws.com.

images.johnsmith.net CNAME images.johnsmith.net.s3.amazonaws.com.

Configurar o destino de alias para s3.amazonaws.com também funciona, mas pode resultar em redirecionamentos HTTP extras.

O Amazon S3 usa o nome de host para determinar o nome do bucket. Por exemplo, suponha que você tenha configurado www.example.com como um CNAME para www.example.com.s3.amazonaws.com. Quando você acessa http://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. O nome do CNAME e o nome do bucket devem ser os mesmos.

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 johnsmith.net.

  2. Crie um bucket que corresponda ao nome de host. Neste exemplo, os nomes de host e do bucket são images.johnsmith.net.

    nota

    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.johnsmith.net CNAME images.johnsmith.net.s3.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.

    nota

    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

Os URLs de hosts virtuais são compatíveis apenas com solicitações sem SSL (HTTP)

nota

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 o REST API ou os SDKs da AWS.

Compatibilidade retroativa

As versões anteriores do Amazon S3 ignoravam de maneira incorreta o cabeçalho Host HTTP. Os aplicativos que dependem desse comportamento não documentado devem ser atualizados para definir o cabeçalho Host corretamente. Como o Amazon S3 determina o nome do bucket a partir do Host quando está presente, o sintoma mais comum desse problema é receber um código de resultado de erro NoSuchBucket inesperado.