Zu Content springen
Deutsch
  • Es gibt keine Vorschläge, da das Suchfeld leer ist.

Shopware 6.4.17.0 bis 6.6 mit Xkey - Header zu lang

Shopware 6.4.17.0 bis 6.6 mit Apache in Verbindung mit Varnish und Xkey

Hinweis: Für Shopware ab Version 6.4.17.0 bis einschließlich 6.6

Einleitung

Shopware nutzt Tags, um Cache-Objekte zu kennzeichnen und zu identifizieren. Diese Tags werden auch genutzt, um bei einer Veränderung des Inhalts diesen aus dem Cache zu löschen.

Ab Shopware 6.4.17.0 ist es möglich, Varnish mit Xkey-Modul zu benutzen anstelle einer Redis-Instanz, um Tags zu speichern.

Die Verwendung des Xkey-Moduls vereinfacht die Konfiguration und minimiert die benötigten Dienste (es wird keine zusätzliche Redis-Instanz mehr benötigt). Shopware hat sich entschieden, ab Shopware 6.7 nur noch Varnish mit Verwendung des Xkey-Moduls zu erlauben.

Das Xkey-Modul speichert Tags aller Objekte, welche in Varnish gespeichert sind. Dazu müssen die Tags von Shopware im HTTP-Header “xkey” an Varnish gemeldet werden. Dieser Header wird in der Standard Shopware Varnish VCL vor Auslieferung wieder entfernt.

Hier ein Beispiel, wie dieser Header aussehen kann:

xkey: system.config-019b0361385273c2903c642fada6ba5d category-route-019b035f50e070c59e90211ded2927ac system.config- cms-page-695477e02ef643e5a016b83ed4cdf63a theme-config-019b036264137337b6a96bba634e54e3 translator-019b035f510072d6b6426be37d42398c

Problem

Da Shopware viele feingranulare Objekte erzeugt, werden entsprechend viele Tags benutzt, was wiederum sehr lange Header erzeugt. Wird ein Apache 2 als Webserver verwendet, kann hierbei leicht die fest einkompilierte Header-Länge von 8 KB überschritten werden. Dies führt dann dazu, dass die Seite nicht mehr korrekt ausgeliefert werden kann (weiße Seite - Status Code 500). Im Apache 2 Error Log finden sich dazu dann Fehlermeldungen wie “Premature end of script headers” oder “Error parsing script headers”.

Lösung

Im Gegensatz zu NGINX kann die Header-Länge bei Apache 2 nicht mehr verändert werden. Um dieses Problem zu lösen, kann man entweder auf den Webserver NGINX wechseln, oder bis einschließlich Shopware 6.6 (ab Shopware 6.7 ist dies der Standard) das “fine-grained caching” deaktivieren. Zur Deaktivierung reicht es, eine neue Konfiguration in Shopware unter config/packages/ mit folgendem Inhalt anzulegen:

# config/packages/x-fgc.yaml
shopware:
    cache:
        tagging:
            each_config: false
            each_snippet: false
            each_theme_config: false

Dadurch werden wesentlich weniger Tags erzeugt, was wiederum die Länge des xkey-Headers deutlich verkleinert.

Hinweis: Ab Shopware Version 6.7 ist dieses Verhalten Standard und diese Konfiguration würde einen Fehler erzeugen. Daher sollte diese Konfiguration bei einem Update auf Shopware 6.7 oder höher vorher entfernt werden.