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:
- 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.
- Crie uma distribuição separada do CloudFront para cada origem que você deseja usar com o mesmo padrão de caminho.
- 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