Konfigurieren von Cache-Control-Header in NGINX

0
72

Caching ist der Prozess der Speicherung der heruntergeladenen Daten für die spätere Verwendung, wo es gelesen werden kann, von der Festplatte statt ersuchenden es wieder. Machen ordnungsgemäße Verwendung der browser und CDN-caching können die Geschwindigkeit Ihrer website deutlich.

Wie Funktioniert Caching Funktioniert?

Jeder browser hat einen eingebauten cache-speichert statische Objekte, die von websites heruntergeladen. Wenn Sie das nächste mal eine Verbindung herstellen, wenn das Objekt Sie fordert, ist noch im cache, wird es zu laden aus dem Speicher, anstatt zu Fragen, für die es wieder, die Beschleunigung die Leistung erheblich und die Verringerung der Belastung auf Ihrem web-server in den Prozess.

Der browser ist ein client-seitiger cache. Jedoch, viele große Websites nutzen ein Content Delivery Network oder CDN. Die CDN sitzt vor Ihrem web-server und speichert Ihre Seiten auf der server-Seite, in der Regel auf mehreren edge-Servern auf der ganzen Welt. Dies verbessert die Zugänglichkeit der Latenz, die Leistung und reduziert die Belastung auf Ihrem web-server. Wenn Sie möchten, erfahren Sie mehr über CDNs, Lesen Sie unseren guide auf Sie hier.

Cache-Control ist ein header, können Sie Ihr web-server hinzufügen, um alle ausgehenden Anfragen. Mit es können Sie angeben, welche Ressourcen zwischengespeichert werden, und für wie lange. Es gibt ein paar Dinge zu beachten, obwohl, bevor Sie gehen, hinzufügen Website.

Bestimmte Seiten sollten niemals zwischengespeichert werden. Alles, was erfordert, dass ein Benutzer anmelden, sollte nicht zwischengespeichert werden, von einem CDN oder sonst Sie Gefahr besteht, dass die Anzeige von einem Benutzer persönliche Informationen an andere. Sie können immer noch cache diese Arten von Seiten auf die browser-Seite alleine (durch Einstellung Cache-Control private). Als Allgemeine Regel gilt, wenn Sie die Seite gehen, um die genaue gleiche für alle Benutzer, wie Sie Ihre Homepage, können Sie Zwischenspeichern. Statischen Ressourcen wie CSS und Bilder, kann in der Regel zwischengespeichert werden, oft viel länger.

Sie wollen auch sicherstellen, dass Sie “vernünftige” Time-To-Live (TTL) Werte für jede Ressource. TTL steuert, wie lange das Objekt wird bleiben im cache, bevor Sie für ungültig erklärt werden, woraufhin der Nutzer auf Anfrage ein neues Objekt. Die trade-off hier ist zwischen eine lange caching-Zeit und schnelle updates. Sie wollen nicht, um cache-Ihre Startseite für ein ganzes Jahr, weil Sie vielleicht etwas ändern am Dienstag. Die Festlegung eines maximalen Alter um ein paar Minuten für Ihr Zuhause Seite ist lang genug, um die unmittelbare lädt, und schnell genug, um für die rasche Ausbreitung von updates. Jedoch, für statische Ressourcen wie Bilder, können Sie nie ändern, und Sie sollten in Ordnung sein, eine hohe TTL-Werte sogar so hoch wie zwei Jahre.

Sie können immer versionierte Dateinamen löst ein erneutes laden des cache. Wenn Sie eine neue version eines CSS-Stylesheet, können Sie es benennen Stile-1.0.1.css und der browser des Benutzers (und alle CDNs davor), sehen es als eine neue Datei, die muss redownloaded. Darüber hinaus sind einige CDNs, können Sie Problem-Handbuch invalidierungen Spülen Sie den vorhandenen cache ohne änderung der Dateinamen.

Wie zu Verwenden Cache-Control in der NGINX

Cache-Control hat ein paar Optionen:

  • öffentlich – zwischengespeichert werden Kann von jedermann, einschließlich Browser und CDN. Verwenden Sie diese für die meisten statischen Objekte.
  • private – Enthält sensible Daten, die nicht zwischengespeichert werden können, die von CDNs oder reverse-proxies. Der browser des Benutzers kann lokal zwischenzuspeichern. Verwenden Sie diese für die meisten authentifizierten Seiten.
  • no-cache – Trotz des namens, es wird nicht deaktiviert Zwischenspeichern. Der browser kann immer noch die Antwort Zwischenspeichern, für die Leistung, sondern müssen über den origin-server für die updates, bevor Sie es. Verwenden Sie dies, wenn Sie möchten, dass der Benutzer jedes mal revalidate
  • no-store – Deaktiviert das Zwischenspeichern völlig. Verwenden Sie diese nur für sehr sensible Daten, das sollte nicht zweimal gesendet werden.

Wenn das max-age, es ist immer in Sekunden erledigt. Jedoch, NGINX ermöglicht es für ein paar mehr eigene Werte:

  • -1 oder ab, wodurch das caching ausgeschaltet, und nicht ändern von bestehenden Headern
  • Epoche, auf Unix-Zeit null ist, wird explizit deaktivieren der Zwischenspeicherung und löschen Sie alle caches (nützlich, wenn Sie verwenden NGINX als reverse-proxy)
  • max, der abläuft, wenn das Universum endet, auf den 31. Dezember 2037
  • 30er Jahre, für Sekunden
  • 1m, für Minuten
  • 24h Stunden
  • 3d, für Tage
  • 1M, für Monate
  • 2y, seit Jahren

Darüber hinaus können Sie die no-transform-Richtlinie, die deaktiviert alle Konvertierungen, die getan werden, um die Ressource. Zum Beispiel, einige CDNs Bilder komprimieren, um die Bandbreite zu reduzieren. Diese Richtlinie deaktiviert dieses Verhalten.

Für NGINX, können Sie ändern Sie die Cache-Control-Header mit den folgenden Richtlinien:

erlischt 1y;
add_header Cache-Control “public, no-transform”;

Die erste Zeile setzt das max-Alter bis 1 Jahr, und zweite stellt die öffentlichen und nicht-transform-caching-Einstellungen. Sie können fügen Sie diese zu einem server block anwenden site-weit, aber eine bessere Methode ist es, dass Datei-Erweiterungen mit einem location-block, um verschiedene Werte, je nach Dateiendung:

location ~* .(?:css|js)$ {
erlischt 1y;
add_header Cache-Control “public”;
}

Diese Lage-block verwendet einen regulären Ausdruck übereinstimmen, gekennzeichnet durch die ~. Dies ist nützlich für die Anwendung Allgemeine Einstellungen für den Inhaltstyp. Wenn Sie wollen Ausnahmen für bestimmte Orte, die Sie verwenden können, eine regelmäßige Lage zu blockieren, die Vorrang vor einer regex-match.

Lage /Profil {
erlischt 2d;
add_header Cache-Control “public, no-transform”;
}

Sie können auch die = modifier, die Spiele Pfade, und hat Vorrang vor einem regex-match und ein standard-block.

Verwenden Ersatz-Steuerelement zu Ändern, CDN Verhalten

Zwar können Sie deaktivieren CDN-caching und noch leverage browser caching durch die Verwendung von Cache-Control: private, es ist besser, haben die direkte Kontrolle über Sie. Die meisten CDNs wird hinsichtlich der Surrogate-Control-header, die Funktionen genau das gleiche wie Cache-Control, mit der Ausnahme soll nur für CDNs. Auf diese Weise können Sie Schnell sagen, eine Sache zu tun, und der Benutzer miteinander zu tun.

In NGINX, müssen Sie diese Kopfzeile manuell, und legen Sie die max-age-Wert anstelle der Verwendung von NGINX ist abgelaufen-Richtlinie.

add_header Surrogate-Control “public, max-age=86400”;
add_header Cache-Control “public, max-age=120”;

Sie werden auf jeden Fall testen wollen mit Ihrem CDN, um zu überprüfen, dass dies funktioniert—Surrogat-Steuerung ist ziemlich neu, und nicht universal.