Umleitung von Nicht-regex auf Fastly anstelle von Nginx (Routen) abladen
In diesem Thema wird eine Lösung für ein typisches Leistungsproblem vorgeschlagen, das bei der Abladung von Nicht-regex-Umleitungen in der Cloud-Infrastruktur zu Fastly anstelle von Nginx in Adobe Commerce auftreten könnte.
Betroffene Produkte und Versionen
- Adobe Commerce in Cloud-Infrastruktur (alle Versionen)
Master/Production/Staging
-Umgebungen mit Fastly
Problem
In Adobe Commerce in der Cloud-Infrastruktur kann eine große Anzahl von Nicht-regex-Umleitungen/Umschreibungen nicht auf der Nginx-Ebene durchgeführt werden und kann daher Leistungsprobleme verursachen.
Ursache
Die Datei "routes.yaml
" im Ordner ".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 abladen.
Diese Nginx-Ebene kann nicht viele Nicht-regex-Umleitungen/Umschreibungen verarbeiten, da sonst Leistungsprobleme auftreten.
Lösung
Die Lösung besteht darin, diese Umleitungen, die nicht-regex sind, stattdessen auf Fastly zu laden. Erstellen Sie einen allgemeinen Fehlerpfad, um zu Fastly umzuleiten.
In den folgenden Schritten wird beschrieben, wie Sie Umleitungen auf Fastly statt auf Nginx platzieren.
-
Erstellen Sie ein Edge-Wörterbuch.
Zunächst können Sie VCL Snippets in Adobe Commerce verwenden, um ein Kantenwörterbuch zu definieren. Diese enthält die Umleitungen.
Einige Vorbehalte hierzu:
-
Fastly kann für Wörterbucheinträge nicht regex tun. Es ist nur eine genaue Übereinstimmung. Weitere Informationen zu diesen Einschränkungen finden Sie in den Dokumenten von Fastly zu den Einschränkungen für Edge-Wörterbücher.
-
Fastly erlaubt maximal 1000 Einträge in einem Wörterbuch. Fastly kann diese Grenze erweitern, was jedoch zum dritten Vorbehalt führt.
-
Jedes Mal, wenn Sie die Einträge aktualisieren und diese aktualisierte VCL für alle Knoten bereitstellen, wird die geometrische Ladezeit mit erweiterten Wörterbüchern verlängert. Das bedeutet, dass ein 2000-Einträge-Wörterbuch tatsächlich 3 x 4 mal langsamer lädt als ein 1000-Einträge-Wörterbuch. Dies ist jedoch nur ein Problem bei der Bereitstellung von VCL (Aktualisierung des Wörterbuchs oder Änderung des Funktionscodes VCL).
Die Verarbeitung einer Anforderung hat keine Auswirkungen auf die Zeit, die Fastly in Anspruch nimmt. Sie hat lediglich Auswirkungen darauf, wie lange Fastly dauert, bis eine neue Konfiguration veröffentlicht wird.
Im Allgemeinen dauern Konfigurationsänderungen im Durchschnitt einige Sekunden, in der Regel nicht mehr als 5-10 Sekunden. Eine 2fache Erhöhung der Wörterbucheinträge dauert also 30 Sekunden, bis Ihre Konfiguration eingeführt wird. Eine 4fache Erhöhung würde näher an 2 Minuten dauern. 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 Umleitungsliste zu konsolidieren. Sie können mehrere Wörterbücher verwenden. Beachten Sie jedoch, dass es mehrere Minuten dauern wird, bis alle Aktualisierungen, die Sie an Ihrem VCL vornehmen, tatsächlich über Fastly aufgefüllt sind.
-
-
Vergleichen Sie die URL mit den Wörterbüchern.
Wenn die URL -Suche auftritt, wird der Vergleich durchgeführt, um den benutzerspezifischen Fehlercode anzuwenden, wenn eine Übereinstimmung gefunden wird.
Verwenden Sie ein weiteres VCL-Snippet, um
vcl_recv
etwas wie Folgendes 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; }
In unserem Beispiel ü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 Umleitung URL von der Tabelle.
-
Verwalten Sie die Umleitung.
Wenn eine Übereinstimmung gefunden wird, wird die Aktion ausgeführt, die für diesen
obj.status
definiert ist, in diesem Fall eine 301 dauerhafte Umleitung zum Verschieben.Verwenden Sie einen endgültigen Ausschnitt in
vcl_error
, um die 301-Fehlercodes 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 überprüfen wir, ob der von
vcl_recv
übergebene Fehlercode übereinstimmt. Wenn ja, setzen wir den Speicherort auf die übergebene Fehlermeldung, ändern dann den Statuscode auf 301 und die Nachricht auf "Dauerhaft verschoben". Zu diesem Zeitpunkt 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 reference
- Konfigurieren von Routen in unserer Entwicklerdokumentation
- Richten Sie Fastly in unserer Entwicklerdokumentation ein.
- VCL Datenblatt zum regulären Ausdruck in unserer Entwicklerdokumentation
- Best Practices für die Änderung von Datenbanktabellen im Playbook für die Commerce-Implementierung