Ir para o conteúdo

Como uso o CloudFront para rotear solicitações para origens específicas?

4 minuto de leitura
0

Quero configurar minha distribuição do Amazon CloudFront para rotear diferentes tipos de solicitações para servidores de origem específicos. Quero direcionar cada solicitação para a origem apropriada com base no caminho do URL.

Resolução

Definir padrões de caminho

Ao criar a distribuição do CloudFront, defina um comportamento de cache. Se você definir mais de um, cada comportamento deverá ter um padrão de caminho exclusivo. O CloudFront então compara o caminho da solicitação com os padrões do caminho na ordem em que você os lista na distribuição.

Os exemplos a seguir mostram como os padrões de caminho correspondem aos caminhos de solicitação associados:

  • /images/* corresponde a /images/cat.jpg e /images/dog.png
  • /en/* corresponde a /en/about e /en/contact
  • /app1/* corresponde a /app1/index.html, mas não a /app1app2/index.html

Importante:

  • os padrões de caminho diferenciam maiúsculas de minúsculas. Por exemplo, /images/cat.jpg não corresponde a /Images/cat.jpg.
  • O CloudFront manipula o caractere # como um identificador de fragmento e não inclui identificadores de fragmento na correspondência do padrão de caminho. Crie uma CloudFront Function para combinar URLs que contenham o caractere #.
  • O CloudFront normaliza os caminhos antes de combiná-los. Por exemplo, /path//file corresponde ao padrão /path/.

Usar várias origens

Por padrão, é possível associar somente uma origem a cada padrão de caminho em um comportamento de cache.

Para rotear solicitações com o mesmo padrão de caminho para várias origens, conclua as seguintes etapas:

  1. Use um parâmetro de sequência de caracteres de consulta para diferenciar suas origens. Por exemplo, use /.jpg?origin=origin1 e /*.jpg?origin=origin2.
  2. Crie uma distribuição separada do CloudFront para cada origem que você deseja usar com o mesmo padrão de caminho.
  3. Use o CloudFront Functions ou o Lambda@Edge para gravar um código personalizado que inspeciona a solicitação e encaminha dinamicamente a solicitação para sua origem.

Encaminhar solicitações com base na localização geográfica

Use uma CloudFront Function para inspecionar o cabeçalho cloudfront-viewer-country e encaminhar solicitações para diferentes origens com base na localização geográfica do visualizador.

O código de exemplo a seguir mostra uma CloudFront Function que redireciona solicitações de países específicos para um comportamento de cache diferente:

function handler(event) {
  var request = event.request;
  var headers = request.headers;
  var country = headers['cloudfront-viewer-country'];

  // List of country codes to route to the first origin
  var allowedCountries = ['US', 'CA'];

  // Create the new URI to redirect to
  var newUri = request.uri.replace('/api/', '/api-geo/');

  if (allowedCountries.includes(country.value)) {
    return request;
  } else {
    var response = {
      statusCode: 302,
      statusDescription: 'Found',
      headers: {
        location: {
          value: newUri
        }
      }
    };
    return response;
  }
}

A função verifica se o país do visualizador está na lista allowedCountries. Se o país estiver na lista, a função permitirá que a solicitação prossiga para o comportamento /api/. Se o país não estiver na lista, a função redirecionará a solicitação para o comportamento /api-geo/. Para realizar o redirecionamento, a função cria um novo URI e retorna uma resposta de redirecionamento 302.

Evitar problemas de cache

Por padrão, o CloudFront armazena respostas em cache com base no URI da solicitação e em determinados cabeçalhos. Se você usar o CloudFront Functions ou o Lambda@Edge para modificar o URI ou os cabeçalhos da solicitação antes que eles cheguem à origem, poderá ter inconsistências de armazenamento em cache.

Para evitar problemas de cache, execute uma das seguintes ações:

  • Se precisar modificar as solicitações somente antes que elas cheguem à origem e quiser manter sua estratégia de cache atual, use uma função do Lambda@Edge. O evento de solicitação de origem deve acionar a função. É uma prática recomendada mover a lógica de modificação da solicitação para uma função do Lambda@Edge. A função deve ser executada no gatilho da solicitação de origem que é ativado após a pesquisa do cache. A chave de cache é então baseada na solicitação original que vem do visualizador.
  • Para criar entradas de cache separadas com base em atributos de solicitação específicos para maior controle sobre o armazenamento em cache, crie uma política de cache personalizada. Inclua cabeçalhos de solicitação adicionais ou strings de consulta na chave de cache para que você tenha chaves de cache exclusivas para solicitações diferentes.

Se você alterar o comportamento do cache, é uma prática recomendada remover os arquivos em cache atuais que o CloudFront enviou. Suas atualizações de comportamento de cache podem então entrar em vigor imediatamente.

Informações relacionadas

Referência de configurações de todas as distribuições

Conteúdo em cache com base em parâmetros de string de consulta

Usar os cabeçalhos de geolocalização do Amazon CloudFront para segmentação geográfica em nível de estado

AWS OFICIALAtualizada há um ano