Stiamo usando Nginx per servire file statici su una piattaforma di sviluppo. Trattandosi di una piattaforma di sviluppo, vorremmo disabilitare la memorizzazione nella cache in modo che ogni modifica venga propagata al server. La configurazione di VHost è abbastanza semplice:
server {
server_name static.server.local;
root /var/www/static;
## Default location
location / {
access_log off;
expires 0;
add_header Cache-Control private;
}
}
Quando accediamo a un file HTML ( http: //static.server.local/test.html ), non abbiamo problemi: il server restituisce un codice 304 non modificato fintanto che il file non viene modificato e una risposta 200 OK con il file modificato quando il file viene modificato.
Tuttavia, sembra comportarsi diversamente con un file Javascript o CSS. Una volta modificato il file, otteniamo una risposta di 200 OK come previsto, ma con il vecchio testo.
Esiste un meccanismo di cache interno in Nginx che potrebbe spiegare questo comportamento? O qualche configurazione che dovremmo aggiungere?
Come nota a margine, ecco l'intestazione restituita da Nginx quando il file è stato modificato (sembra corretto):
Accept-Ranges:bytes
Cache-Control:max-age=0
private
Connection:keep-alive
Content-Length:309
Content-Type:text/css
Date:Fri, 13 May 2011 14:13:13 GMT
Expires:Fri, 13 May 2011 14:13:13 GMT
Last-Modified:Fri, 13 May 2011 14:13:05 GMT
Server:nginx/0.8.54
Modifica
Dopo aver provato diverse impostazioni con la expires
direttiva e l' Cache-Control
intestazione, ho effettuato ulteriori indagini. In effetti, il server è installato su un guest Ubuntu VirtualBox e i dati vengono letti da una cartella condivisa che si trova sull'host Mac OSX.
Se il file viene modificato da un IDE (NetBeans) sull'host, sembra che le modifiche non vengano visualizzate, mentre se lo modifico direttamente sul guest (usando VIM), viene aggiornato.
La cosa strana è che non si comporta in modo simile con i file HTML.
Abbastanza sconcertante.
Modifica 2 (RISPOSTA)
In effetti, l'origine del problema era più sul lato VirtualBox. O piuttosto un conflitto tra VirtualBox e l'opzione "sendfile" del server.
Questo link VirtualBox Hates Sendfile mi ha dato la soluzione: cambiare la sendfile bandiera nella configurazione del server di fuori :
sendfile off;
Spero che ciò possa aiutare anche altre persone a utilizzare VirtualBox per lo sviluppo. :)
Ci sono alcune informazioni aggiuntive sul forum VirtualBox .