Entrega de todo o site no CloudFront

1

Depois de muita pesquisa, parece que não consigo descobrir se é viável armazenar em cache todo o meu site na Cloudfront. (Recursos estáticos, assim como o HTML retornado em uma solicitação dinâmica).

A configuração

Meu servidor de origem NÃO é uma instância do EC2, mas está em uma hospedagem separada.

Eu configurei uma distribuição do Cloudfront para armazenar em cache tudo do meu servidor de origem example.com . Eu posso acessá-lo através do URL gerado da Cloudfront abcxyz.cloudfront.net .

Definir o Cloudfront como "na frente" do meu servidor de origem?

O que eu preciso de ajuda é entender se posso apontar meu domínio para cloudfront, então example.com vai para o cache do Cloudfront primeiro (semelhante a como você configuraria o Varnish "na frente de" seu servidor de origem).

Em tal configuração, o que eu defino meu servidor de origem como dentro do Cloudfront? Configurá-lo como example.com levaria a uma referência circular em que o cloudfront tenta verificar a si mesmo por um recurso.

O meu servidor de origem não deve mais ser configurado para responder a example.com solicitações nessa configuração? (Isso me permite configurar meu servidor de origem no Cloudfront para algo como "content.example.com" e respondendo a solicitações dinâmicas e estáticas de lá?)

Ou a Cloudfront não é ideal para um cache de todo o site? Não devo tentar atender a uma resposta dinâmica (a saída HTML) do cache e só servir ativos estáticos (js, img, css, etc)?

    
por fideloper 07.10.2013 / 15:10

1 resposta

2

Depois de mais algumas pesquisas, parece que o Cloudfront CAN pode armazenar todo o seu site, mas você quer ou não merecer uma investigação. Espero que isso seja útil para qualquer futuro transeunte.

Entrega de todo o site

Veja algumas informações em Entrega em todo o site Aviso: Este slide é de alto nível - não entra em detalhes de implementação

Para que cumpra todo o site , você precisa seguir estes passos gerais.

Let's assume you want to serve example.com and www.example.com via Cloudfront (you want Cloudfront to act as a site-wide cache, similar to how you might use Varnish).

Configurar uma distribuição

Configure uma distribuição na Cloudfront para o seu domínio.

  • Normalmente, escolho deixar meu servidor de origem decidir as configurações de cache por meio de cabeçalhos de saída
  • Defina sua origem para algo como content.example.com

Aponte seu domínio

1) Aponte seus domínios de nível superior ( example.com e provavelmente www.example.com ) para seu URL da Cloudfront. Isso será algo como abc123.cloudfront.net em vez de um endereço IP

Note que este é um CNAME ( abc123.cloudfront.net ) em vez de um registro A (endereço IP). Se o seu DNS permite que você defina um CNAME sobre um A para o domínio raiz, acredito que pode variar entre provedores.

Na verdade, acho que definir um CNAME para o seu nível de domínio raiz é contra o RFC. Isso pode restringir você a configurar a versão "www" do seu domínio para a Cloudfront, usar o Route 53 ou usar o DNS Made Simple como este artigo sugere .

2) Defina seus registros DNS para que algo como content.example.com aponte para o seu servidor de origem. Isso fornecerá uma maneira de o cloudfront alcançar seu servidor de origem, mas o público ainda usará example.com e www.example.com para visualizar o conteúdo do site

Advertências

Existem algumas ressalvas:

  1. Cookies - Se o cache de cookies é importante ou não. Pedidos com cookies não são normalmente armazenados em cache (ou, mais precisamente, cada cookie exclusivo cria uma cópia em cache diferente ). Considere que a Cloudfront ignore os cookies definidos pelo servidor para que ele possa armazenar em cache o conteúdo. Isso não afetará os cookies adicionados no lado do cliente de serviços como o Google Analytics ou comentários do Disqus. Isso afetará a lógica do servidor se você confiar na separação de cookies / IDs de sessão de convidados e usuários autenticados.

  2. A Cloudfront oferece suporte a solicitações GET e HEAD . POST e outras solicitações de verbo HTTP resultarão em páginas de erro. Isso tem implicações se você permitir que os usuários enviem formulários, bem como solicitações ajax.

Eu não tenho usuários públicos no meu site. Eu tenho uma área de administração que eu uso sozinha. Portanto, posso entrar na área de administração do meu site por meio de content.example.com diretamente, e não por meio do público example.com e www.example.com . Isso ignora completamente o cache, eliminando a necessidade de passar cookies e permitindo o uso de qualquer verbo HTTP.

Isso funciona para mim, mas desconfio que essa não seja uma ótima situação para a maioria das pessoas. YMMV com Cloudfront e cache de todo o site. Ainda é ótimo para o armazenamento em cache de recursos estáticos.

    
por 07.10.2013 / 18:14