Por que o local de redirecionamento do site S3 não é seguido pelo CloudFront?

16

Eu tenho um site hospedado no Amazon S3. É a nova versão de um site antigo hospedado no WordPress.

Eu configurei alguns arquivos com os metadados Website Redirect Location para lidar com locais antigos e redirecioná-los para as novas páginas do site.

Por exemplo: eu tive http://www.mysite.com/solution que eu quero redirecionar para http://mysite.s3-website-us-east-1.amazonaws.com/product.html Então, criei um arquivo vazio chamado solution dentro do meu bloco com os metadados corretos:

Website Redirect Location = /product.html

Os metadados de redirecionamento do S3 equivalem a um 301 Moved Permanently que é ótimo para SEO. Isso funciona muito bem ao acessar o URL diretamente do domínio S3.

Também configurei uma distribuição do CloudFront com base no intervalo do website. E quando tento acessar através da minha distribuição, o redirecionamento não funciona, ou seja:

http://xxxx123.cloudfront.net/solution não redireciona, mas faz o download do arquivo vazio.

Então, minha pergunta é como manter o redirecionamento através da distribuição do CloudFront? Ou alguma ideia sobre como lidar com o redirecionamento sem deteriorar o SEO?

Obrigado

    
por Yannick Chaze 21.11.2012 / 17:52

2 respostas

42

Eu encontrei esse problema recentemente e encontrei uma solução que parecia funcionar.

Eu criei uma distribuição do Cloudfront com uma origem personalizada apontando para o nome de host do site estático do S3 em vez do nome do host do intervalo. No caso do OP, a origem desejada seria.

mysite.s3-website-us-east-1.amazonaws.com

Atingir uma distribuição do Cloudfront usando apenas o intervalo, pois a origem não funciona porque o bucket realmente não redireciona. Só serve arquivos e armazena metadados.

Espero que ajude.

    
por 24.01.2013 / 03:07
1

Análise

De acordo com a Request e comportamento de resposta e códigos de status HTTP suportados para Origens feitos sob encomenda , Amazon CloudFront não segue Redirects , infelizmente:

[...] After you configure the redirect, the first time an end user submits a request for the object, CloudFront Front sends the request to the origin, and the origin responds with a redirect (for example, 302 Moved Temporarily). CloudFront caches the redirect and returns it to the end user. CloudFront does not follow the redirect. [emphasis mine]

Claro, você está usando o Amazon S3 em vez de uma origem personalizada, e uma seção relacionada está notavelmente ausente de Solicitação e comportamento de resposta para o Amazon S3 Origens , mas dadas redirecionamentos Amazon S3 só foram adicionados muito recentemente (ver Amazon S3 - Suporte para o site redireciona ), ele pode estar faltando ainda.

Assim eu arrisco o palpite de que você não está recebendo um arquivo vazio com código de status HTTP 200 OK , em vez de um status HTTP 301 Movido permanentemente com nenhum corpo em tudo - você realmente verificou isso com um navegador ou, eventualmente, apenas com uma ferramenta de linha de comando como, por exemplo, cURL ou HTTPie ? As últimas ferramentas geralmente exigem um parâmetro explícito para seguir os redirecionamentos, de modo que isso pode facilmente passar despercebido.

Solução Potencial

Se a análise acaba por ser correto, você precisa configurar o redirecionamento para direcionar explicitamente CloudFront vez, mais uma vez ver Redirecionamentos :

You can configure your web server to redirect requests to one of the following locations:

  • The new URL of the object on the origin server. When the end user follows the redirect to the new URL, the end user bypasses CloudFront and goes straight to the origin. As a result, we recommend that you not redirect requests to the new URL of the object on the origin.

  • The new CloudFront URL for the object. When the end user submits the request that contains the new CloudFront URL, CloudFront gets the object from the new location on your origin, caches it at the edge location, and returns the object to the end user. Subsequent requests for the object will be served by the edge location. This avoids the latency and load associated with viewers requesting the object from the origin. However, every new request for the object will incur charges for two requests to CloudFront.

    
por 22.11.2012 / 10:30