2016-01-22 11 views
10

Sto servendo un'applicazione JavaScript di una sola pagina tramite nginx e quando distribuisco la nuova versione, voglio forzare i browser a invalidare la cache JS e richiedere/utilizzare la versione più recente a disposizione.Scaduta la cache delle risorse nei browser quando si sostituisce il file server impresso via nginx

Così, per esempio, quando ho sostituire un file sul dispositivo di piegatura del server, denominato my-app-8e8faf9.js, con un file chiamato my-app-eaea342.js, non voglio browser per tirare my-app-8e8faf9.js dal loro nascondiglio più. Ma quando non c'è una nuova versione disponibile, voglio comunque che leggano le risorse dalla cache.

Come ottengo ciò con la configurazione di nginx? Questa è la mia configurazione attuale:

server { 
    listen 80; 

    server_name my.server.com; 

    root /u/apps/my_client_production/current; 
    index index.html; 

    # ~2 seconds is often enough for most folks to parse HTML/CSS and 
    # retrieve needed images/icons/frames, connections are cheap in 
    # nginx so increasing this is generally safe... 
    keepalive_timeout 10; 
    client_max_body_size 100M; 

    access_log /u/apps/my_client_production/shared/log/nginx.access.log; 
    error_log /u/apps/my_client_production/shared/log/nginx.error.log info; 

    location/{ 
    try_files $uri $uri/ =404; 

    gzip_static on; 
    expires max; 
    add_header Cache-Control public; 

    } 

    # Error pages 
    error_page 500 502 503 504 /500.html; 
} 

risposta

4

L'invalidazione della cache modificando gli URL delle risorse è una pratica normale.

Ma per farlo funzionare, è necessario che i file html non vengano memorizzati nella cache per sempre in modo che il browser abbia alcune informazioni quando questi nomi cambiano.

Quindi posizioni separate per html e risorse. Il Matcher può essere diverso, a seconda di come li memorizzi, ad esempio:

location/{ 
    try_files $uri $uri/ =404; 
    gzip_static on; 
    } 

location ^~ /assets/ { 
    gzip_static on; 
    expires max; 
    add_header Cache-Control public; 
    } 
Problemi correlati