Nicht regex auslagern leitet zu Fastly anstatt zu Nginx um (Routen)
In diesem Abschnitt wird eine Lösung für ein typisches Leistungsproblem bei Weiterleitungen vorgeschlagen, das auftreten kann, wenn Sie in der Cloud-Infrastruktur nicht regex Weiterleitungen an Fastly anstatt Nginx in Adobe Commerce abladen.
Betroffene Produkte und Versionen
- Adobe Commerce auf Cloud-Infrastruktur (alle Versionen)
Master/Production/Staging
Umgebungen, die Fastly nutzen
Problem
In Adobe Commerce auf Cloud-Infrastrukturen können viele nicht regex Umleitungen/Umschreibungen nicht auf der Nginx vorgenommen werden, was zu Leistungsproblemen führen kann.
Ursache
Die routes.yaml
-Datei im .magento/routes.yaml
definiert Routen für Ihre Adobe Commerce in der Cloud-Infrastruktur.
Wenn die Größe Ihrer routes.yaml
-Datei 32 KB oder größer ist, sollten Sie Ihre nicht regex Umleitungen/Umschreibungen auf Fastly auslagern.
Diese Nginx kann eine große Anzahl nicht regex Umleitungen/Umschreibungen nicht verarbeiten, da sonst Leistungsprobleme auftreten.
Lösung
Die Lösung besteht darin, diese nicht regex Weiterleitungen stattdessen nach Fastly abzuladen. Erstellen Sie einen generischen Fehlerpfad, um zu Fastly umzuleiten.
In den folgenden Schritten wird beschrieben, wie Sie Umleitungen auf Fastly anstatt auf Nginx platzieren.
-
Erstellen Sie ein Edge-Wörterbuch.
Zunächst können Sie VCL Snippets in Adobe Commerce) verwenden um ein Edge-Wörterbuch zu definieren. Dies enthält die Umleitungen.
Einige Vorbehalte:
-
Fastly können regex nicht auf Wörterbucheinträge anwenden. Es ist nur eine exakte Übereinstimmung. Weitere Informationen zu diesen Einschränkungen finden Sie in den Dokumenten zu Edge-Wörterbuchbeschränkungen von Fastly.
-
Fastly ist auf 1.000 Einträge in einem einzelnen Wörterbuch beschränkt. Fastly können diese Grenze erweitern, aber das führt zum dritten Vorbehalt.
-
Jedes Mal, wenn Sie die Einträge aktualisieren und diese aktualisierten VCL auf allen Knoten bereitstellen, erhöht sich die geometrische Ladezeit mit sich erweiternden Wörterbüchern - was bedeutet, dass ein Wörterbuch mit 2000 Einträgen tatsächlich 3x-4x langsamer geladen wird als ein Wörterbuch mit 1000 Einträgen. Dies ist jedoch nur dann ein Problem, wenn Sie die VCL bereitstellen (das Wörterbuch aktualisieren oder den VCL ändern).
Die Zeit, die für die Verarbeitung einer Anfrage Fastly ist, wird nicht beeinflusst. Sie wirkt sich nur darauf aus, wie lange es Fastly, eine neue Konfiguration zu verarbeiten.
Im Allgemeinen dauern Konfigurationsänderungen im Durchschnitt einige Sekunden, normalerweise nicht mehr als 5-10 Sekunden. Es dauert also mehr als 30 Sekunden, bis die Konfiguration zweimal so viele Wörterbuchelemente enthält. Eine 4-fache Erhöhung würde etwa 2 Minuten in Anspruch nehmen. Dies führt zum vierten Vorbehalt.
-
Es gibt eine ziemlich harte Grenze von 10.000 Einträgen in einem Edge-Wörterbuch.
Es wird dringend empfohlen, Ihre Weiterleitungsliste zu konsolidieren. Sie können mehrere Wörterbücher verwenden. Beachten Sie jedoch, dass es bei jeder Aktualisierung Ihres VCL mehrere Minuten dauert, bis das Wörterbuch in allen Fastly aktualisiert ist.
-
-
Vergleichen Sie die URL mit den Wörterbüchern.
Wenn die URL Suche stattfindet, wird der Vergleich durchgeführt, um den benutzerdefinierten Fehler-Code anzuwenden, falls eine Übereinstimmung gefunden wird.
Verwenden Sie ein anderes VCL, um
vcl_recv
etwas wie das Folgende hinzuzufügen:code language-none declare local var.redir-path STRING; set var.redir-path = table.lookup(redirects, std.tolower(req.url), ""); if (var.redir-path != "") { error 912 var.redir-path; }
Hier überprüfen wir, ob die URL im Tabelleneintrag vorhanden ist. Wenn dies der Fall ist, rufen wir einen internen Fastly-Fehler auf und übergeben an diesen Fehler die Umleitungs-URL aus der Tabelle.
-
Verwalten Sie die Umleitung.
Wenn eine Übereinstimmung gefunden wird, wird die für diese
obj.status
definierte Aktion durchgeführt, in diesem Fall eine 301-dauerhafte Umleitung zur Verschiebung.Verwenden Sie einen endgültigen Ausschnitt in
vcl_error
, um die 301-Fehler-Codes zurück an den Client zu senden:code language-none if (obj.status == 912) { set obj.http.location = obj.response; set obj.status = 301; set obj.response = "Moved Permanently"; return(deliver); }
Mit diesem Block prüfen wir, ob der von
vcl_recv
übergebene Fehlercode übereinstimmt. Wenn ja, legen wir den Speicherort auf die übergebene Fehlermeldung fest und ändern dann den Status-Code in 301 und die Nachricht in „Dauerhaft verschoben“. An diesem Punkt sollte die Antwort bereit sein, zum Client zurückzukehren.
Staging-Service
Wenn Sie keine Adobe Commerce-Staging-Umgebung ausführen möchten, aber sehen möchten, wie diese Umleitungen aussehen würden, können Sie ein Staging-Konto direkt auf Fastly einrichten.
Verwandtes Lesen
- Fastly VCL Referenz
- Konfigurieren von Routen in unserer Entwicklerdokumentation
- Einrichten Fastly in unserer Entwicklerdokumentation
- VCL Cheat Sheet für reguläre Ausdrücke in unserer Entwicklerdokumentation
- Best Practices zum Ändern von Datenbanktabellen im Commerce-Implementierungs-Playbook