Direkt zum Inhalt

Wie verwende ich CloudFront, um Anfragen an bestimmte Ursprünge weiterzuleiten?

Lesedauer: 4 Minute
0

Ich möchte meine Amazon CloudFront-Distribution so konfigurieren, dass verschiedene Arten von Anfragen an bestimmte Ursprungsserver weitergeleitet werden. Ich möchte jede Anfrage basierend auf dem URL-Pfad an den entsprechenden Ursprung weiterleiten.

Lösung

Pfadmuster definieren

Wenn du die CloudFront-Distribution erstellst, definierst du ein Cache-Verhalten. Wenn du mehrere definierst, muss jedes Verhalten ein eindeutiges Pfadmuster haben. CloudFront gleicht dann den Anfragepfad mit den Pfadmustern in der Reihenfolge ab, in der du sie in der Distribution auflistest.

Die folgenden Beispiele zeigen, wie Pfadmuster ihren zugehörigen Anfragepfaden entsprechen:

  • /images/* entspricht /images/cat.jpg und /images/dog.png
  • /en/* entspricht /en/about und /en/contact
  • /app1/* entspricht /app1/index.html, aber nicht /app1app2/index.html

Wichtig:

  • Pfadmuster unterscheiden zwischen Groß- und Kleinschreibung. Zum Beispiel stimmt /images/cat.jpg nicht mit /Images/cat.jpg überein.
  • CloudFront behandelt das Zeichen # als Fragmentbezeichner und bezieht keine Fragmentbezeichner in die Pfadmusterübereinstimmung ein. Erstelle eine CloudFront-Funktion, um URLs abzugleichen, die das Zeichen # enthalten.
  • CloudFront normalisiert Pfade, bevor es mit ihnen übereinstimmt. Zum Beispiel entspricht /path//file dem Muster /path/.

Mehrere Ursprünge verwenden

Standardmäßig kannst du jedem Pfadmuster in einem Cache-Verhalten nur einen Ursprung zuordnen.

Gehe wie folgt vor, um Anfragen mit demselben Pfadmuster an mehrere Ursprünge weiterzuleiten:

  1. Verwende einen Abfragezeichenfolgenparameter, um die Ursprünge zu unterscheiden. Verwende beispielsweise /.jpg? origin=origin1 und**/*.jpg?origin=origin2**.
  2. Erstelle für jeden Ursprung, den du verwenden möchtest, eine separate CloudFront-Distribution mit demselben Pfadmuster.
  3. Verwende CloudFront-Funktionen oder Lambda @Edge, um benutzerdefinierten Code zu schreiben, der die Anfrage überprüft und die Anfrage dynamisch an den Ursprung weiterleitet.

Routenanfragen basierend auf dem geografischen Standort

Verwende eine CloudFront-Funktion, um den cloudfront-viewer-country-Header zu überprüfen und Anfragen je nach geografischem Standort des Viewers an verschiedene Ursprünge weiterzuleiten.

Der folgende Beispielcode zeigt eine CloudFront-Funktion, die Anfragen aus bestimmten Ländern zu einem anderen Cache-Verhalten umleitet:

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

Die Funktion überprüft, ob das Land des Viewers auf der allowedCountries-Liste steht. Wenn das Land auf der Liste steht, ermöglicht die Funktion, dass die Anfrage zum Verhalten /api/ übergeht. Wenn das Land nicht auf der Liste steht, leitet die Funktion die Anfrage an das Verhalten /api-geo/ weiter. Um die Umleitung durchzuführen, erstellt die Funktion eine neue URI und gibt eine 302-Umleitungsantwort zurück.

Caching-Probleme vermeiden

Standardmäßig speichert CloudFront Antworten auf der Grundlage des Anfrage-URI und bestimmter Header im Cache. Wenn du CloudFront-Funtionen oder Lambda @Edge verwendest, um den Anfrage-URI oder die Header zu ändern, bevor sie den Ursprung erreichen, kann es zu Caching-Inkonsistenzen kommen.

Führe eine der folgenden Maßnahmen durch, um Caching-Probleme zu vermeiden:

  • Wenn du Anfragen nur ändern musst, bevor sie den Ursprung erreichen und du die aktuelle Caching-Strategie beibehalten möchtest, verwende eine Lambda@Edge-Funktion. Das Ursprungsanfrageereignis muss die Funktion auslösen. Es hat sich bewährt, die Logik zur Anfrageänderung in eine Lambda@Edge-Funktion zu verschieben. Die Funktion muss auf dem ursprünglichen Anfrage-Trigger ausgeführt werden, der nach der Cache-Suche aktiviert wird. Der Cache-Schlüssel basiert dann auf der ursprünglichen Anfrage, die vom Viewer kommt.
  • Erstelle eine benutzerdefinierte Cache-Richtlinie, um separate Cache-Einträge auf der Grundlage bestimmter Anfrageattribute für mehr Kontrolle über das Caching zu erstellen. Füge zusätzliche Anfrage-Header oder Abfragezeichenfolgen in den Cache-Schlüssel ein, sodass du eindeutige Cache-Schlüssel für verschiedene Anfragen hast.

Wenn du das Caching-Verhalten änderst, empfiehlt es sich, die vorhandenen zwischengespeicherten Dateien zu entfernen, die CloudFront bereitgestellt hat. Die Aktualisierungen des Caching-Verhaltens können dann sofort wirksam werden.

Ähnliche Informationen

Alle Referenzen zu den Distributionseinstellungen

Inhalt auf der Grundlage von Abfragezeichenfolgenparametern zwischenspeichern

Amazon CloudFront Geolocation-Header für Geo-Targeting auf Staatsebene nutzen

AWS OFFICIALAktualisiert vor 10 Monaten