Erstellen eines benutzerdefinierten VCL-Snippets zum Blockieren von Referrer-Spam
Der folgende benutzerdefinierte VCL-Code-Ausschnitt (JSON-Format) zeigt die Logik zum Überprüfen und Blockieren von Anfragen. Das VCL-Snippet erfasst den Host einer Referrer-Website in einer Kopfzeile und vergleicht dann den Host-Namen mit der Liste der URLs im referrer_blocklist
. Wenn der Host-Name übereinstimmt, wird die Anfrage mit einem 403 Forbidden
Fehler blockiert.
{
"name": "block_bad_referrer",
"dynamic": "0",
"type": "recv",
"priority": "5",
"content": "if (req.http.Referer ~ \"^(.*:)//([A-Za-z0-9\-\.]+)(:[0-9]+)?(.*)$\") {set req.http.Referer-Host = re.group.2;}if (table.lookup(referrer_blocklist, req.http.Referer-Host)) {error 403 \"Forbidden\";}"
}
Bevor Sie einen Ausschnitt basierend auf diesem Beispiel erstellen, überprüfen Sie die Werte, um festzustellen, ob Sie Änderungen vornehmen müssen:
-
name
— Name des VCL-Snippets. Für dieses Beispiel haben wirblock_bad_referrer
verwendet. -
dynamic
- Wert 0 zeigt einen regulären Ausschnitt an, der für die Fastly-Konfiguration in die versionierte VCL hochgeladen werden soll. -
priority
- Bestimmt, wann der VCL-Snippet ausgeführt wird. Die Priorität5
darin, diesen Code vor einem der standardmäßigen Magento-VCL-Snippets (magentomodule_*
) auszuführen, denen eine Priorität von 50 zugewiesen wurde. Legen Sie die Priorität für jeden benutzerdefinierten Ausschnitt auf einen Wert von über oder unter 50 fest, je nachdem, wann der Ausschnitt ausgeführt werden soll. Snippets mit Zahlen niedrigerer Priorität werden zuerst ausgeführt. -
type
- Gibt einen Speicherort an, an dem der Ausschnitt in die VCL-Version eingefügt werden soll. In diesem Beispiel ist der VCL-Ausschnitt einrecv
. Wenn der Ausschnitt in die VCL-Version eingefügt wird, wird er dervcl_recv
-Unterroutine, unterhalb des standardmäßigen Fastly-VCL-Codes und über allen Objekten hinzugefügt. -
content
- Der Ausschnitt des VCL-Codes, der in einer Zeile ohne Zeilenumbrüche ausgeführt werden soll.
Nachdem Sie den Code für Ihre Umgebung überprüft und aktualisiert haben, verwenden Sie eine der folgenden Methoden, um das benutzerdefinierte VCL-Snippet zu Ihrer Fastly-Service-Konfiguration hinzuzufügen:
-
Fügen Sie das benutzerdefinierte VCL-Snippet von der Admin. Diese Methode wird empfohlen, wenn Sie auf Admin zugreifen können. (Erfordert Fastly Version 1.2.58 oder höher.)
-
Speichern Sie das JSON-Code-Beispiel in einer Datei (z. B.
allowlist.json
) und Sie es mithilfe der Fastly-API. Verwenden Sie diese Methode, wenn Sie nicht auf Admin zugreifen können.
Hinzufügen des benutzerdefinierten VCL-Snippets
-
Anmelden beim Administrator.
-
Klicken Sie Stores > Einstellungen > Konfiguration > Erweitert > System.
-
Erweitern Sie Vollständiger Seitencache > Fastly-Konfiguration > Benutzerdefinierte VCL-Snippets.
-
Klicken Sie Benutzerdefiniertes Snippet erstellen.
-
Fügen Sie die VCL-Snippet-Werte hinzu:
-
Name —
block_bad_referrer
-
Typ —
recv
-
Priorität —
5
-
VCL Snippet-Inhalt —
if (req.http.Referer ~ "^(.*:)//([A-Za-z0-9\-\.]+)(:[0-9]+)?(.*)$") { set req.http.Referer-Host = re.group.2; } if (table.lookup(referrer_blocklist, req.http.Referer-Host)) { error 403 "Forbidden"; }
-
-
Klicken Sie Erstellen.
-
Nachdem die Seite neu geladen wurde, klicken Sie im Abschnitt Fastly-Konfiguration auf VCL zu Fastly.
-
Aktualisieren Sie nach Abschluss des Uploads den Cache entsprechend der Benachrichtigung oben auf der Seite.
Validiert die aktualisierte VCL-Version während des Upload-Prozesses schnell. Wenn die Validierung fehlschlägt, bearbeiten Sie Ihr benutzerdefiniertes VCL-Snippet, um alle Probleme zu beheben. Laden Sie dann die VCL erneut hoch.
$MAGENTO_CLOUD_APP_DIR/var/vcl_snippets_custom
in Ihrer Umgebung hinzufügen. Snippets in diesem Verzeichnis werden automatisch hochgeladen, wenn Sie im Commerce-Admin auf VCL zu Fastly hochladen) klicken. Siehe Automatisierte Bereitstellung benutzerdefinierter VCL-Snippets im Fastly CDN-Modul für die Magento 2-Dokumentation.