Antworten auf Ihre häufigsten Fragen

Was ist der NGINX Cache?

Bei unseren WebServern haben Sie die Möglichkeit, optional einen NGINX Cache im KIS zu aktivieren. Hier beschreiben wir um was genau es sich dabei handelt.

Was ist NGINX?

NGINX ist - wie auch Apache - ein Webserver, welcher zu einer Vielzahl von Anwendungszwecken eingesetzt werden kann. Einer davon ist der Einsatz als transparenter Caching Proxy. Dabei wird der NGINX vor den Apache Webserver geschaltet und speichert die vom Apache generierten dynamischen Inhalte in einem Zwischenspeicher.

Wie genau funktioniert das?

Nehmen wir als Beispiel einen Wordpress Blog, bei dem auf der Startseite die neusten 10 Beiträge angezeigt werden.

Beim ersten Aufruf des Blogs wird die Anfrage an den Apache Webserver durch gereicht, welcher dann Wordpress in Gang setzt. Dazu muss zunächst der PHP Code von Wordpress interpretiert und ausgeführt werden, wobei dann auch verschiedene Anfragen (z.B. für die 10 aktuellsten Beiträge) an die Datenbank gestellt werden. Als Ergebnis wird dann ein HTML Dokument an den Apache Webserver zurückgegeben, welcher dieses dann an den Browser des Besuchers ausliefert.

Dieser Prozess nimmt eine gewisse Zeit in Anspruch, fordert vom Server gewisse Ressourcen und muss für jede Anfrage wiederholt werden. Bei kleinen Webseiten stellt dies kein Problem dar, jedoch kann dieses Prozedere bei sehr aufwendigen oder hoch frequentierten Webseiten für eine hohe Last auf dem Server führen, was wiederum die Geschwindigkeit, mit welcher der Server die Seiten ausliefert, verringern kann.

Der NGINX Cache verkürzt diesen Prozess, indem er - vor den Apache Webserver geschaltet - den ersten Aufruf an den Apache durch reicht und, sobald dieser das HTML Dokument generiert hat, dieses für 10 Minuten (Standardeinstellung) in einem Zwischenspeicher ablegt. Alle weiteren Zugriffe auf die gleiche Seite werden dann direkt aus diesem Zwischenspeicher bedient. Weder der Apache noch PHP oder MySQL müssen für diese Zugriffe aktiv werden. Dies sorgt für eine Reduzierung der Serverlast und beschleunigt die Auslieferung der Seiten, da der Server so nur noch einmal pro 10 Minuten den Inhalt generieren muss.

Die Cachedauer von 10 Minuten gilt jedoch nur, wenn die Anfrage vom Server erfolgreich (HTTP Statuscode 200 oder 302) beantwortet wurde. Für abweichende HTTP Statuscodes gelten andere Zeiten:

HTTP StatuscodeCachedauer
200/30210 Minuten
4041 Minute
3015 Minuten

 

Wie kann ich den NGINX Cache aktivieren?

Sie können den Cache im KIS unter dem folgenden Menüpunkt aktivieren:

Produktverwaltung - WebServer - Konfigurieren - Skripte & Datenbanken - Caching-Einstellungen

Der NGINX Cache lässt sich hier auf Verzeichnisbasis aktivieren. Stellen Sie dazu einfach die Einstellung von Off auf On um:

NGINX Cache

Nach ca. 15 Minuten ist der Cache für das gewählte Verzeichnis aktiviert.

Wie stelle ich fest, dass eine Seite aus dem Cache ausgeliefert wurde?

Sobald der Cache aktiviert ist, hängt der Webserver den Header X-Cache-Status an alle Antworten. Wird eine Seite oder eine Ressource, wie zum Beispiel ein Bild, aus dem Cache ausgeliefert, hat der Header den Wert HIT. Wird die Anfrage nicht aus dem Cache heraus bedient, lautet der Wert MISS. Dieser Header ist in den Entwicklertools Ihres Browsers sichtbar, kann aber auch zum Beispiel mit dem Kommandozeilen Programm cURL eingesehen werden. Hier einmal ein Beispiel für einen Aufruf, der aus dem Cache bedient wurde:

% curl -I nur-ein-beispiel.de
HTTP/1.1 200 OK
Date: Sun, 04 Jun 2017 14:59:45 GMT
Content-Type: text/html
Content-Length: 0
Connection: keep-alive
Server: Apache
Last-Modified: Tue, 28 Mar 2017 18:16:06 GMT
ETag: "0-54bce7411bed8"
X-Cache-Status: HIT   <-- Hier ist der Status sichtbar
Accept-Ranges: bytes

Lässt sich der Cache beeinflussen oder leeren?

Ja, Sie haben dazu mehrere Möglichkeiten. Im folgenden führen wir die einzelnen Optionen vor.

Leeren des Caches für eine bestimmte Seite

In der Standardeinstellung werden die Seiten für 10 Minuten (600 Sekunden) im Zwischenspeicher gelagert. Führen Sie also Änderungen an Ihren Seiten durch, sind diese spätestens nach 10 Minuten sichtbar.

Möchten Sie den Cache für eine bestimmte Seite sofort leeren, können Sie dazu den Header purge-cache:1 an die entsprechende URL der Seite senden. Am einfachsten klappt dies über das Kommandozeilenprogramm cURL:

Leert den Cache der Startseite von example.org:
curl "http://example.org/" -H "purge-cache:1"

Leert den Cache des Impressums von example.org:
curl "http://example.org/impressum" -H "purge-cache:1"

Sollte Ihnen curl nicht zur Verfügung stehen, können Sie diesen Header auch über die Entwicklertools Ihres Webbrowsers senden. Im Folgenden zeigen wir dies am Beispiel der Firefox Entwicklertools:

  • Rufen Sie zunächst Ihre Seite auf und öffnen Sie die Entwicklertools mit Strg + Shift + Q
  • Klicken Sie hier auf die "Laden" Schaltfläche, damit die Netzwerkanfragen aufgezeichnet werden
  • Klicken Sie nun auf die Ressource, die aus dem Cache entfernt werden soll (im Beispiel ist dies die Startseite) und dann auf die Schaltfläche "Bearbeiten und erneut senden":
    Firefox: Header bearbeiten
  • Sie können die HTTP-Header nun bearbeiten. Tragen Sie hier in das Feld "Request-Header" den Header purge-cache:1 ein und klicken Sie auf "Senden":
    Firefox: Header senden

Eine weitere Möglichkeit ist das Nutzen eines Browserplugins, wie zum Beispiel Requestly (Chrome/Firefox) oder HttpRequester (Firefox).

Beeinflussen was bzw. wie lange etwas gecached wird

Sie können durch eine Auswahl von HTTP Headern bestimmen wie lange einzelne Ressourcen gecached werden sollen oder auch bestimmte Ressourcen komplett vom Caching ausschließen. Die folgenden Header können Sie per .htaccess Datei oder, sofern unterstützt, direkt in Ihrer Anwendung setzen:

HeaderMögliche WerteEinschränkungenBeschreibung
X-Accel-ExpiresCaching Zeit in Sekunden (0 deaktiviert das Caching)-Definiert die Cache-Zeit einer Antwort in Sekunden
ExpiresCaching Zeit in SekundenGreift nur wenn X-Accel-Expires nicht gesetzt istDefiniert die Cache-Zeit einer Antwort in Sekunden
Cache-ControlCaching Zeit in SekundenGreift nur wenn X-Accel-Expires nicht gesetzt istDefiniert die Cache-Zeit einer Antwort in Sekunden
Set-CookieAlle (Greift, sobald irgendein Wert gesetzt ist)-Wenn Set-Cookie gesetzt ist, wird die Antwort nicht gecached
Vary*-Wenn "*" als Wert gesetzt ist, wird die Antwort nicht gecached

otto.friedrich@hosteurope.de xanthippe.ypsilante@hosteurope.de hercules.ikarus@hosteurope.de