Passer au contenu

Comment utiliser CloudFront pour acheminer des requêtes vers des origines spécifiques ?

Lecture de 5 minute(s)
0

Je souhaite configurer ma distribution Amazon CloudFront pour acheminer différents types de requêtes vers des serveurs d'origine spécifiques. Je souhaite diriger chaque requête vers l'origine appropriée en fonction du chemin de l'URL.

Résolution

Définir des modèles de chemin

Lorsque vous créez la distribution CloudFront, définissez un comportement de cache. Si vous en définissez plusieurs, chaque comportement doit avoir un modèle de chemin unique. CloudFront compare ensuite le chemin de requête aux modèles de chemin dans l'ordre dans lequel vous les répertoriez dans la distribution.

Les exemples suivants montrent comment les modèles de chemin correspondent aux chemins de requête associés :

  • /images/* correspond à /images/cat.jpg et à /images/dog.png
  • /en/* correspond á /en/about et à /en/contact
  • /app1/* correspond á /app1/index.html, mais pas à /app1app2/index.html

Important :

  • Les modèles de chemin sont sensibles à la casse. Par exemple, /images/cat.jpg ne correspond pas à /Images/cat.jpg.
  • CloudFront gère le caractère # comme identifiant de fragment et n'inclut pas d'identifiants de fragment dans la correspondance du modèle de chemin. Créez une fonction CloudFront pour faire correspondre les URL contenant le caractère #.
  • CloudFront normalise les chemins avant de les faire correspondre. Par exemple, /path//file correspond au modèle /path/.

Utiliser plusieurs origines

Par défaut, vous ne pouvez associer qu'une seule origine à chaque modèle de chemin dans un comportement de cache.

Pour acheminer des requêtes ayant le même schéma de chemin vers plusieurs origines, procédez comme suit :

  1. Utilisez un paramètre de chaîne de requête pour différencier vos origines. Par exemple, utilisez /.jpg?origin=origin1 et /*.jpg?origin=origin2.
  2. Créez une distribution CloudFront distincte pour chaque origine que vous souhaitez utiliser avec le même modèle de chemin.
  3. Utilisez Fonctions CloudFront ou Lambda@Edge pour écrire du code personnalisé qui inspecte la requête et l'achemine de façon dynamique vers votre origine.

Acheminer des requêtes en fonction de la situation géographique

Utilisez une fonction CloudFront pour inspecter l'en-tête cloudfront-viewer-country et acheminer les requêtes vers différentes origines en fonction de la situation géographique de l’utilisateur.

L'exemple de code suivant illustre une fonction CloudFront qui redirige les requêtes provenant de pays spécifiques vers un autre comportement de cache :

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;
  }
}

La fonction vérifie si le pays de l'utilisateur figure dans la liste des pays autorisés. Si le pays figure dans la liste, la fonction permet à la requête de passer au comportement /api/. Si le pays ne figure pas dans la liste, la fonction redirige la requête vers le comportement /api-geo/. Pour effectuer la redirection, la fonction crée un nouvel URI et renvoie une réponse de redirection 302.

Prévenir les problèmes de mise en cache

Par défaut, CloudFront met en cache les réponses en fonction de l'URI de la requête et de certains en-têtes. Si vous utilisez CloudFront Functions ou Lambda@Edge pour modifier l'URI ou les en-têtes de la requête avant qu'ils n'atteignent l'origine, vous risquez de rencontrer des incohérences dans la mise en cache.

Pour éviter les problèmes de mise en cache, effectuez l'une des actions suivantes :

  • Si vous devez modifier les requêtes uniquement avant qu'elles n'atteignent l'origine et que vous souhaitez conserver votre stratégie de mise en cache actuelle, utilisez une fonction Lambda@Edge. L'événement de requête d'origine doit déclencher la fonction. Il est recommandé de déplacer la logique de modification de la requête vers une fonction Lambda@Edge. La fonction doit être exécutée sur le déclencheur de requête d'origine qui est activé après la recherche dans le cache. La clé de cache est ensuite basée sur la requête d'origine provenant de l’utilisateur.
  • Pour créer des entrées de cache distinctes en fonction d'attributs de requête spécifiques afin de mieux contrôler la mise en cache, créez une politique de cache personnalisée. Incluez des en-têtes de requête ou des chaînes de requête supplémentaires dans la clé de cache afin de disposer de clés de cache uniques pour différentes requêtes.

Si vous modifiez le comportement de mise en cache, il est recommandé de supprimer les fichiers mis en cache existants que CloudFront a servis. Les mises à jour de votre comportement de mise en cache peuvent alors prendre effet immédiatement.

Informations connexes

Référence à tous les paramètres de distribution

Contenu du cache basé sur les paramètres de la chaîne de requête

Tirer parti des en-têtes de géolocalisation Amazon CloudFront pour le ciblage géographique au niveau de l'état

AWS OFFICIELA mis à jour il y a un an