Salta al contenuto

Come posso utilizzare CloudFront per indirizzare le richieste a origini specifiche?

4 minuti di lettura
0

Desidero configurare la mia distribuzione di Amazon CloudFront per indirizzare diversi tipi di richieste a server di origine specifici. Desidero indirizzare ogni richiesta all'origine appropriata in base al percorso dell'URL.

Risoluzione

Definisci i modelli di percorso

Quando crei la distribuzione di CloudFront, definisci un comportamento della cache. Se ne definisci più di uno, ogni comportamento deve avere un modello di percorso univoco. CloudFront confronta quindi il percorso della richiesta con i modelli di percorso nell'ordine in cui li elenchi nella distribuzione.

Gli esempi seguenti mostrano come i modelli di percorso corrispondono ai percorsi di richiesta associati:

  • /images/* corrisponde a /images/cat.jpg e a /images/dog.png
  • /en/* corrisponde a /en/about e a /en/contact
  • /app1/* corrisponde a /app1/index.html ma non a /app1app2/index.html

Importante:

  • I modelli di percorso fanno distinzione tra maiuscole e minuscole. Ad esempio, /images/cat.jpg non corrisponde a /Images/cat.jpg.
  • CloudFront gestisce il carattere # come identificatore di frammento e non include identificatori di frammento nella corrispondenza del modello di percorso. Crea una funzione CloudFront per abbinare gli URL che contengono il carattere #.
  • CloudFront normalizza i percorsi prima di abbinarli. Ad esempio, /path//file corrisponde al modello /path/.

Utilizza origini multiple

Per impostazione predefinita, puoi associare solo un'origine a ciascun modello di percorso in un comportamento della cache.

Per indirizzare le richieste con lo stesso modello di percorso a più origini, completa i seguenti passaggi:

  1. Utilizza un parametro della stringa di query per differenziare le origini. Ad esempio, utilizza /.jpg?origin=origin1 e /*.jpg?origin=origin2.
  2. Crea una distribuzione di CloudFront separata per ogni origine che desideri utilizzare con lo stesso modello di percorso.
  3. Utilizza Funzioni CloudFront o Lambda@Edge per scrivere un codice personalizzato che ispezioni la richiesta e la indirizzi dinamicamente all'origine.

Indirizza le richieste in base alla posizione geografica

Utilizza una funzione CloudFront per ispezionare l'intestazione cloudfront-viewer-country e indirizzare le richieste verso origini diverse in base alla posizione geografica del visualizzatore.

Il seguente esempio di codice mostra una funzione CloudFront che reindirizza le richieste provenienti da paesi specifici a un diverso comportamento della 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 funzione verifica se il paese del visualizzatore è presente nella lista allowedCountries. Se il paese è nell'elenco, la funzione consente alla richiesta di procedere al comportamento /api/. Se il paese non è presente nella lista, la funzione reindirizza la richiesta al comportamento /api-geo/. Per eseguire il reindirizzamento, la funzione crea un nuovo URI e restituisce una risposta di reindirizzamento 302.

Evita problemi di caching

Per impostazione predefinita, CloudFront memorizza nella cache le risposte in base all'URI della richiesta e a determinate intestazioni. Se utilizzi Funzioni CloudFront o Lambda@Edge per modificare l'URI o le intestazioni della richiesta prima che raggiungano l'origine, potresti riscontrare incongruenze nella cache.

Per evitare problemi di caching, intraprendi una delle seguenti azioni:

  • Se devi modificare le richieste solo prima che raggiungano l'origine e desideri mantenere l'attuale strategia di caching, utilizza una funzione Lambda@Edge. L'evento di richiesta dell'origine deve attivare la funzione. È consigliabile spostare la logica di modifica della richiesta su una funzione Lambda@Edge. La funzione deve essere eseguita sul trigger della richiesta dell'origine attivato dopo la ricerca nella cache. La chiave della cache si basa quindi sulla richiesta originale che proviene dal visualizzatore.
  • Per creare voci della cache separate in base a specifici attributi di richiesta per un maggiore controllo sul caching, crea una policy della cache personalizzata. Includi intestazioni di richiesta o stringhe di query aggiuntive nella chiave della cache in modo da disporre di chiavi della cache univoche per richieste diverse.

Se modifichi il comportamento di caching, è consigliabile rimuovere i file memorizzati nella cache esistenti serviti da CloudFront. Gli aggiornamenti del comportamento di caching possono quindi avere effetto immediato.

Informazioni correlate

Riferimento a tutte le impostazioni di distribuzione

Contenuto della cache in base ai parametri della stringa di query

Leverage Amazon CloudFront geolocation headers for state level geo-targeting (Come sfruttare le intestazioni di geolocalizzazione di Amazon CloudFront per l'indirizzamento geografico a livello di paese)

AWS UFFICIALEAggiornata un anno fa