Domanda

Sto cercando di dire a Nginx a cache alcuni dei miei beni (JS, CSS) per sempre, o almeno per un tempo molto lungo.

L'idea è che una volta che un pacchetto di asset è compilato e pubblicato con un prefisso URI /assets/ (ad esempio /assets/foo-{fingerprint}.js) rimane lì e non ha mai bisogno di cambiare.

Gli internet mi hanno detto che dovrei scrivere la seguente regola:

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;
}
.

Mi aspetterei che questo comporterebbe risposte con il codice http 304 "non modificato", ma ciò che ottengo è un http 200 coerente (OK) ogni volta.

Ho provato alcuni altri approcci, ad esempio:

a) Impostare esplicitamente il tempo di modifica a un punto costante nel tempo in passato;

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

b) Passaggio ai controlli If-None-Match;

add_header ETag $1;
if_modified_since off;
.

Tuttavia, l'unica cosa che ha davvero lavorato secondo necessità era questa:

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

Sono perso.Questo è contrario a tutto ciò che pensavo fosse giusto.Per favore aiuto.

È stato utile?

Soluzione

Dovresti cambiare i tuoi internet, dal momento che ti danno consigli errati.

Basta rimuovere tutte le linee add_header dalla tua posizione (oltre a surplus brake):

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

e leggi i documenti dal vero internet: http://nginx.org/r/expires e http://tools.ietf.org/html/rfc2616

Altri suggerimenti

Sembra parte della mia configurazione.Durante la mia ricerca ho capito che il browser utilizza l'analisi euristica per convalidare le richieste con intestazioni condizionali (e-tag, ultima modifica).Ha molto senso per le risposte di back-end, quindi è possibile gestire che per salvare le risorse del server.

Ma in termini di file statici (JS, CSS, immagini), puoi dire al browser di servirli subito senza alcuna convalida condizionale.È utile se si aggiorna il nome del file se si verifica alcuna modifica.

Questa parte della configurazione lo fa accadere:

add_header Cache-Control public;
add_header Last-Modified "";
add_header ETag "";
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top