2014-07-03 9 views
17

Utilizzo Nginx come server Web e voglio implementare un metodo di memorizzazione nella cache del browser in modo che gli utenti conservino copie dei file statici non modificati localmente e scarichino solo i file modificati. Una delle proposizioni era usare il timestamp dei file per capire i file modificati e aggiornarli solo, ma nel mio caso questo non è possibile poiché dopo ogni nuova distribuzione viene creata una nuova versione dell'intera applicazione Web e tutti i timestamp dei file modificare.Come configurare ETag su Nginx

Ho studiato un po 'l'intestazione ETag, e mi è sembrata una buona soluzione, ma ho scoperto che gli Etags non sono ancora supportati ufficialmente da Nginx.

Esiste un modo per implementare Etags su Nginx o soluzioni alternative?

+1

Se disattivi 'gzip' usando' gzip off; 'linea puoi vedere l'intestazione' etag' sulla tua risposta. – efkan

+2

Ricorda che nginx utilizza l'ultima data di modifica del file e la dimensione del file per generare l'etag. –

+0

Se si vede un reclamo da uno scanner di sicurezza (Nikto ecc.) Su etags che perdono inode, è probabilmente un falso positivo se si sta eseguendo nginx perché [nginx non include gli inode in etags] (http://serverfault.com/questions/690.341/algoritmo di-dietro-nginx-ETAG-generazione). Può essere disabilitato in Apache, anche se Apache perde gli inode di default (vedi la direttiva 'FileETag'). – Synchro

risposta

27

Aggiorna il tuo Nginx.

Syntax:  etag on | off; 
Default: etag on; 

Context: http, server, location 

This directive appeared in version 1.3.3. 

Enables or disables automatic generation of the “ETag” response header field for static resources. 

Fonte: http://nginx.org/en/docs/http/ngx_http_core_module.html#etag

+8

Grazie, l'ho provato e l'intestazione Etag è stata aggiunta all'intestazione HTTP, ma la convalida della cache si basa ancora sui timestamp dei file, anche se ho rimosso l'intestazione Last Modified. Voglio che i file vengano controllati se hanno davvero un cambiamento nel contenuto e non solo verificando i timestamp dei file – HanouaJ

7

Tutte le versioni più recenti di Nginx (al 2016) verrà impostato automaticamente questi.

Ad esempio:

location /img { 
    root /path/to/public; 
} 

e le intestazioni di risposta saranno restituiti Etag + Last-Modified intestazioni.