Erste Schritte mit benutzerdefiniertem VCL
Fastly unterstützt eine angepasste Version der Varnish Configuration Language (VCL), um die Fastly-Service-Konfiguration auf Ihre Anforderungen anzupassen.
Benutzerdefinierte VCL-Snippets sind Blöcke der VCL-Logik, die zur aktiven VCL-Version hinzugefügt wird, die auf Ihre Adobe Commerce-Site hochgeladen wurde. Ein benutzerdefiniertes VCL-Snippet ändert, wie schnelle Zwischenspeicherdienste auf Anforderungs-Traffic reagieren. Sie können beispielsweise ein benutzerdefiniertes VCL-Snippet hinzufügen, um den Anforderungs-Traffic nur von bestimmten Client-IP-Adressen zuzulassen. Alternativ können Sie ein Snippet erstellen, um Traffic von Websites zu blockieren, von denen bekannt ist, dass sie VerweisspAM an Ihre Adobe Commerce-Sites senden.
Benutzerdefinierte VCL-Snippets - generiert, kompiliert und an alle Fastly-Caches übertragen - laden und aktivieren Sie ohne Serverausfall.
Unterstützt schnell zwei Arten von benutzerdefinierten VCL-Snippets:
-
Reguläre Snippets - Benutzerdefinierte reguläre VCL-Snippets werden für bestimmte VCL-Versionen codiert. Sie können reguläre VCL-Snippets über die Admin- oder die Fastly-API erstellen, ändern und bereitstellen.
-
Dynamische Snippets - VCL-Snippets, die mit der Fastly-API erstellt wurden. Sie können dynamische Snippets ändern und bereitstellen, ohne die Fastly VCL-Version für Ihren Dienst aktualisieren zu müssen.
Es wird empfohlen, benutzerdefinierte VCL-Snippets mit Edge-Wörterbüchern und Zugriffssteuerungslisten (ACL) zu verwenden, um Daten zu speichern, die in Ihrem benutzerdefinierten Code verwendet werden.
-
Edge-Wörterbuch - Speichert Daten als Schlüssel-Wert-Paare in einem Wörterbuchcontainer, auf den von benutzerdefinierten VCL-Snippets verwiesen werden kann
-
Edge ACL - Speichert die Client-IP-Adressdaten, die die Zugriffssteuerungsliste für Bausteine oder Zulassungsregeln definieren, die mithilfe benutzerdefinierter VCL-Snippets implementiert wurden
Das Wörterbuch und die ACL-Daten werden auf den Fastly Edge-Knoten bereitgestellt, auf die über Netzwerkregionen hinweg zugegriffen werden kann. Außerdem können die Daten dynamisch im Netzwerk aktualisiert werden, ohne dass Sie den VCL-Code für Ihre Staging- oder Produktionsumgebung neu bereitstellen müssen.
Tutorial
In diesem Tutorial und diesen Beispielen wird die Verwendung regulärer benutzerdefinierter VCL-Snippets mit Edge-Wörterbüchern und Edge-ACLs zum Anpassen der Fastly-Dienstkonfiguration für Adobe Commerce veranschaulicht. Weitere Informationen finden Sie in der Fastly-Dokumentation:
- Anleitung zu Fastly VCL - Informationen zur Implementierung von Fastly Varnish, zu Fastly VCL-Erweiterungen und Ressourcen für weitere Informationen zu Varnish und VCL.
- Fastly VCL reference - Ausführliche Programmierreferenz zur Entwicklung und Fehlerbehebung von schnell benutzerdefinierten VCL- und benutzerdefinierten VCL-Snippets.
Sie können benutzerdefinierte VCL-Snippets über den Adobe Commerce-Administrator oder mithilfe der Fastly-API erstellen und verwalten:
-
Adobe Commerce-Admin: Wir empfehlen die Verwendung des Adobe Commerce-Administrators zur Verwaltung benutzerdefinierter VCL-Snippets, da dieser Prozess die Validierung, den Upload und die Anwendung der VCL-Änderungen auf die Fastly-Service-Konfiguration automatisiert. Außerdem können Sie die benutzerdefinierten VCL-Snippets, die der Fastly-Dienstkonfiguration hinzugefügt wurden, über den Admin anzeigen und bearbeiten.
-
Fastly API: Wenn Sie nicht auf den Admin zugreifen können, verwenden Sie die Fastly-API, um benutzerdefinierte VCL-Snippets zu verwalten. Verwenden Sie beispielsweise die API zur Fehlerbehebung bei der Konfiguration des Fastly-Dienstes, wenn die Site ausfällt, oder zum Hinzufügen eines benutzerdefinierten VCL-Snippets. Außerdem können einige Vorgänge nur mit der API durchgeführt werden. Beispielsweise müssen Sie die API verwenden, um eine ältere VCL-Version zu reaktivieren oder alle VCL-Snippets anzuzeigen, die in einer bestimmten VCL-Version enthalten sind. Siehe API-Schnellverweis für VCL-Snippets.
Beispiel-VCL-Codefragment
Das folgende Beispiel zeigt das benutzerdefinierte VCL-Snippet (JSON-Format), das den Traffic nach Client-IP-Adresse filtert:
{
"service_id": "FASTLY_SERVICE_ID",
"version": "{Editable Version #}",
"name": "apply_acl",
"priority": "100",
"dynamic": "1",
"type": "hit",
"content": "if ((client.ip ~ {ACLNAME}) && !req.http.Fastly-FF){ error 403; }"
}
Die VCL-Logik im Feld content
führt die folgenden Aktionen aus:
-
Überprüft die eingehende IP-Adresse,
client.ip
bei jeder Anfrage -
Blockiert alle Anfragen mit einer IP-Adresse, die in der ACL ACLNAME -Edge enthalten ist, und gibt einen
403 Forbidden
-Fehler zurück.
Die folgende Tabelle enthält Details zu Schlüsseldaten für benutzerdefinierte VCL-Snippets. Weitere Informationen finden Sie in der Referenz zu VCL-Snippets in der Fastly-Dokumentation.
API_KEY
active
true
oder false
zurück. Wenn "true", wird das Snippet oder die Version verwendet. Klonen Sie ein aktives Snippet mit seiner Versionsnummer.content
dynamic
false
für reguläre Snippets zurück, die im versionierten VCL für die Konfiguration des Fastly-Dienstes enthalten sind. Gibt true
für einen dynamischen Codeausschnitt zurück, der geändert und bereitgestellt werden kann, ohne dass eine neue VCL-Version erforderlich ist.number
priority
Numerischer Wert von 1
bis 100
, der angibt, wann der benutzerdefinierte VCL-Codeausschnitt ausgeführt wird. Snippets mit niedrigeren Prioritätswerten werden zuerst ausgeführt. Wenn kein Wert angegeben ist, wird der Standardwert priority
auf 100
gesetzt.
Jedes benutzerdefinierte VCL-Snippet mit dem Prioritätswert 5
wird sofort ausgeführt. Dies eignet sich am besten für VCL-Code, der das Anforderungsrouting implementiert (Block und Zulassungslisten und Umleitungen). Die Priorität 100
eignet sich am besten zum Überschreiben des standardmäßigen VCL-Codefragments.
Alle standardmäßigen VCL-Snippets, die im Magento-Fastly-Modul enthalten sind, haben priority=50
.
- Weisen Sie eine hohe Priorität wie
100
zu, um benutzerdefinierten VCL-Code nach allen anderen VCL-Funktionen auszuführen und den VCL-Standardcode zu überschreiben.
service_id
type
init
(über den Unterroutinen) und recv
(innerhalb der Unterroutinen). Weitere Informationen finden Sie in der Referenz zu Fastly VCL-Snippets.Benutzerdefinierte VCL von Admin verwalten
Sie können benutzerdefinierte VCL-Snippets hinzufügen aus dem Abschnitt Fastly Configuration > Custom VCL Snippets im Admin.
Die Ansicht Benutzerdefinierte VCL-Snippets zeigt nur Snippets, die über den Administrator hinzugefügt wurden. Wenn Snippets mit der Fastly API hinzugefügt werden, verwenden Sie die API, um sie zu verwalten.
Die folgenden Beispiele zeigen, wie Sie benutzerdefinierte VCL-Snippets aus dem Admin erstellen und verwalten und Fastly Edge-Module und Edge-Wörterbücher verwenden:
Verwalten von VCL mithilfe der API
Im folgenden Beispiel erfahren Sie, wie Sie reguläre VCL-Snippet-Dateien erstellen und sie mithilfe der Fastly-API zu Ihrer Fastly-Service-Konfiguration hinzufügen. Sie können die Snippets über die Anwendung Terminal erstellen und verwalten. Sie benötigen keine SSH-Verbindung in einer bestimmten Umgebung.
Voraussetzungen:
-
Konfigurieren Sie Ihre Adobe Commerce in der Cloud-Infrastruktur-Umgebung für Fastly-Dienste. Siehe Schnelles Einrichten.
-
Schnelles Abrufen von API-Anmeldeinformationen zum Authentifizieren von Anfragen an die Fastly-API. Stellen Sie sicher, dass Sie die Anmeldeinformationen für die richtige Umgebung erhalten: Staging oder Produktion.
-
Speichern Sie die Fastly-Dienst-Anmeldeinformationen als Bash-Umgebungsvariablen, die Sie in cURL-Befehlen verwenden können:
code language-bash export FASTLY_SERVICE_ID=<Service-ID>
code language-bash export FASTLY_API_TOKEN=<API-Token>
Die exportierten Umgebungsvariablen sind nur in der aktuellen Bash-Sitzung verfügbar und gehen beim Schließen des Terminals verloren. Sie können Variablen neu definieren, indem Sie einen neuen Wert exportieren. So zeigen Sie die Liste der exportierten Variablen für Fastly an:
code language-bash export | grep FASTLY
Hinzufügen von VCL-Snippets
In diesem Tutorial werden die grundlegenden Schritte zum Hinzufügen benutzerdefinierter Snippets mithilfe der Fastly-API beschrieben.
Voraussetzungen
-
Ihre Umgebung muss für die Verwendung des Fastly CDN konfiguriert sein. Siehe Fastly-Dienste konfigurieren.
-
Stellen Sie sicher, dass Sie die neueste Version des Fastly CDN-Moduls für Magento 2 ausführen. Siehe Aktualisieren des Schnellmoduls.
-
Überprüfen Sie die Umgebungskonfiguration für den Fastly-Dienst. Siehe Schnelles Zwischenspeichern überprüfen.
-
Sie müssen über Administratorberechtigungen verfügen, um auf die Staging- und Produktionsumgebungen zugreifen zu können.
Schritt 1: Suchen Sie die aktive VCL-Version.
Verwenden Sie den Vorgang "Fastly API get version", um die aktive VCL-Versionsnummer abzurufen:
curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/active
Beachten Sie in der JSON-Antwort die aktive VCL-Versionsnummer, die im Schlüssel number
zurückgegeben wird, z. B. "number": 99
. Sie benötigen die Versionsnummer, wenn Sie den VCL zur Bearbeitung klonen.
{
"testing": false,
"locked": true,
"number": 99,
"active": true,
"service_id": "872zhjyxhto5SIRb3GAE0",
"staging": false,
"created_at": "2019-01-29T22:38:53Z",
"deleted_at": null,
"comment": "Magento Module uploaded VCL",
"updated_at": "2019-01-29T22:39:06Z",
"deployed": false
}
Speichern Sie die aktive Versionsnummer in einer Bash-Umgebungsvariablen für die Verwendung in nachfolgenden API-Anfragen:
export FASTLY_VERSION_ACTIVE=<Version>
Schritt 2: Clone the active VCL version and all snippets
Bevor Sie benutzerdefinierte VCL-Snippets hinzufügen oder ändern können, müssen Sie eine Kopie der aktiven VCL-Version zur Bearbeitung erstellen. Verwenden Sie den Fastly API-Vorgang clone:
curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_VERSION_ACTIVE/clone -X PUT
In der JSON-Antwort wird die Versionsnummer inkrementiert und der Schlüssel active ist false
. Sie können die neue, inaktive VCL-Version lokal ändern.
{
"testing": false,
"locked": false,
"number": 100,
"active": false,
"service_id": "vW2bLFWhhto5SIRb3GAE0",
"staging": false,
"created_at": "2019-01-29T22:38:53Z",
"deleted_at": null,
"comment": "Magento Module uploaded VCL",
"updated_at": "2019-01-29T22:39:06Z",
"deployed": false
}
Speichern Sie die neue Versionsnummer in einer Bash-Umgebungsvariablen zur Verwendung in nachfolgenden Befehlen:
export FASTLY_EDIT_VERSION=<Version>
Schritt 3: Erstellen eines benutzerdefinierten VCL-Snippets
Erstellen und speichern Sie Ihren benutzerdefinierten VCL-Code in einer JSON-Datei mit folgendem Inhalt und Format:
{
"name": "<name>",
"dynamic": "0",
"type": "<type>",
"priority": "100",
"content": "<code all in one line>"
}
Die Werte umfassen:
-
name
- Name für das VCL-Snippet. -
dynamic
- Gibt an, ob es sich um einen regulären Ausschnitt oder einen dynamischen Ausschnitt handelt. -
type
- Gibt den Speicherort für das Einfügen des generierten Snippets an, z. B.init
(über den Unterroutinen) undrecv
(innerhalb der Unterroutinen). Informationen zu diesen Werten finden Sie unter Fastly VCL Snippet Object values . -
priority
—Ein Wert von1
bis100
, der bestimmt, wann der benutzerdefinierte VCL-Codeausschnitt ausgeführt wird. Benutzerdefinierte VCL-Snippets mit niedrigeren Werten werden zuerst ausgeführt.Der gesamte VCL-Standardcode des Fastly VCL-Moduls hat den Wert
priority
von50
. Wenn eine Aktion zuletzt ausgeführt werden soll oder der standardmäßige VCL-Code überschrieben werden soll, verwenden Sie eine höhere Zahl, z. B.100
. Um benutzerdefinierten VCL-Codefragment-Code sofort auszuführen, legen Sie die Priorität auf einen niedrigeren Wert fest, z. B.5
. -
content
- Das Snippet des VCL-Codes, der in einer Zeile ohne Zeilenumbrüche ausgeführt werden soll. Siehe Beispiel für ein benutzerdefiniertes VCL-Snippet.
Schritt 4: Hinzufügen des VCL-Snippets zur Fastly-Konfiguration
Verwenden Sie den Vorgang Fastly API create snippet , um das benutzerdefinierte VCL-Snippet zur VCL-Version hinzuzufügen.
curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_EDIT_VERSION/snippet -H 'Content-Type: application/json' -X POST --data @<filename.json>
Der <filename.json>
ist der Name der Datei, die Sie im vorherigen Schritt vorbereitet haben. Wiederholen Sie diesen Befehl für jedes VCL-Snippet.
Wenn Sie eine 500 Internal Server Error
-Antwort vom Fastly-Dienst erhalten, überprüfen Sie die JSON-Dateisyntax, um sicherzustellen, dass Sie eine gültige Datei hochladen.
Schritt 5: Validieren und Aktivieren benutzerdefinierter VCL-Snippets
Nachdem Sie ein benutzerdefiniertes VCL-Snippet hinzugefügt haben, fügt das Snippet schnell in die Version VCL ein, die Sie bearbeiten. Um Änderungen anzuwenden, führen Sie die folgenden Schritte aus, um den VCL-Codeausschnitt zu validieren und die VCL-Version zu aktivieren.
-
Verwenden Sie den Vorgang Fastly API validate VCL version , um den aktualisierten VCL-Code zu überprüfen.
code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_EDIT_VERSION/validate
Wenn die Fastly-API einen Fehler zurückgibt, beheben Sie das Problem und validieren Sie die aktualisierte VCL-Version erneut.
-
Verwenden Sie den Vorgang "Fastly API activate", um die neue VCL-Version zu aktivieren.
code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_EDIT_VERSION/activate -X PUT
API-Kurzreferenz für VCL-Snippets
Diese API-Anforderungsbeispiele verwenden exportierte Umgebungsvariablen, um die Anmeldeinformationen für die Authentifizierung bei Fastly bereitzustellen. Weitere Informationen zu diesen Befehlen finden Sie in der Fastly API-Referenz.
-
Aktive VCL-Versionsnummer abrufen
code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/active
-
Auflisten aller normalen VCL-Snippets, die an einen Dienst angehängt sind
code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_VERSION/snippet
-
Überprüfen eines einzelnen Snippets
code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_VERSION/snippet/<snippet_name>
Die
<snippet_name>
ist der Name eines Ausschnitts, z. B.my_regular_snippet
. -
Aktualisieren eines Snippets
Ändern Sie die vorbereitete JSON-Datei und senden Sie die folgende Anfrage:
code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_VERSION/snippet/<snippet_name> -H 'Content-Type: application/json' -X PUT --data @<filename.json>
-
Löschen eines einzelnen VCL-Codefragments
Rufen Sie eine Liste von Snippets ab und verwenden Sie den folgenden
curl
-Befehl mit dem jeweiligen Snippet-Namen, um zu löschen:code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_VERSION/snippet/<snippet_name> -X DELETE
-
Werte im standardmäßigen Fastly VCL-Code überschreiben
Erstellen Sie einen Snippet mit aktualisierten Werten und weisen Sie die Priorität "
100
"zu.