Frage

Ich versuche Nginx anzuweisen, einige meiner Assets (JS, CSS) für immer oder zumindest für eine sehr lange Zeit zwischenzuspeichern.

Die Idee ist, dass, sobald ein Asset-Bundle zusammengestellt und veröffentlicht wurde, mit einem /assets/ URI-Präfix (z. B. /assets/foo-{fingerprint}.js) es bleibt dort und muss sich nie ändern.

Das Internet sagte mir, ich solle die folgende Regel schreiben:

location ~ ^/assets/.*-([^.]+)\.(js|css)$ {
  gzip_static on; # there's also a .gz of the asset
  expires max;
  add_header Cache-Control public;
  add_header Last-Modified "";
  add_header ETag "";
  break;
}

Ich gehe davon aus, dass dies zu Antworten mit dem HTTP-Code 304 „Not Modified“ führen würde, aber ich erhalte jedes Mal ein konsistentes HTTP 200 (OK).

Ich habe einige andere Ansätze ausprobiert, zum Beispiel:

a) die Änderungszeit explizit auf einen konstanten Zeitpunkt in der Vergangenheit zu setzen;

add_header Last-Modified "Thu, 01 Jan 1970 00:00:00 GMT";

b) Umschalten auf If-None-Match Schecks;

add_header ETag $1;
if_modified_since off;

Das Einzige, was wirklich wie nötig funktionierte, war jedoch Folgendes:

add_header Last-Modified "Thu, 01 Jan 2030 00:00:00 GMT";
if_modified_since before;

Ich bin verloren.Das widerspricht allem, was ich für richtig gehalten habe.Bitte helfen Sie.

War es hilfreich?

Lösung

Sie sollten Ihr Internet wechseln, da es Ihnen falsche Ratschläge gibt.

Entfernen Sie einfach alle add_header Leitungen von Ihrem Standort (sowie überschüssige brake):

location ~ ^/assets/.*-([^.]+)\.(js|css)$ {
   gzip_static on; # there's also a .gz of the asset
   expires max;
}

und lesen Sie die Dokumente aus dem wahren Internet: http://nginx.org/r/expires Und http://tools.ietf.org/html/rfc2616

Andere Tipps

Es scheint Teil meiner Konfiguration zu sein.Während meiner Recherche habe ich festgestellt, dass der Browser heuristische Analysen verwendet, um Anfragen mit ConditionalGet-Headern (E-Tag, Last-Modified) zu validieren.Für Back-End-Antworten ist dies sehr sinnvoll, sodass Sie damit umgehen können, um Serverressourcen zu sparen.

Aber in Bezug auf statische Dateien (JS, CSS, Bilder) können Sie den Browser anweisen, sie sofort ohne bedingte Get-Validierung bereitzustellen.Es ist hilfreich, wenn Sie den Dateinamen aktualisieren, wenn Änderungen vorgenommen werden.

Dieser Teil der Konfiguration macht es möglich:

add_header Cache-Control public;
add_header Last-Modified "";
add_header ETag "";
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top