Wir verwenden Nginx, um statische Dateien auf einer Entwicklungsplattform bereitzustellen. Da es sich um eine Entwicklungsplattform handelt, möchten wir das Caching deaktivieren, damit jede Änderung auf den Server übertragen wird. Die Konfiguration des VHost ist ganz einfach:
server {
server_name static.server.local;
root /var/www/static;
## Default location
location / {
access_log off;
expires 0;
add_header Cache-Control private;
}
}
Wenn wir auf eine HTML-Datei ( http: //static.server.local/test.html ) zugreifen , tritt kein Problem auf: Der Server gibt einen Code 304 "Nicht geändert" zurück , solange die Datei nicht geändert wird, und eine 200-OK- Antwort mit die geänderte Datei, wenn die Datei geändert wird.
Bei einer Javascript- oder CSS-Datei scheint es sich jedoch anders zu verhalten. Sobald die Datei geändert wurde, erhalten wir erwartungsgemäß eine Antwort in Höhe von 200 OK , jedoch mit dem alten Text.
Gibt es einen internen Cache-Mechanismus in Nginx, der dieses Verhalten erklären könnte? Oder eine Konfiguration, die wir hinzufügen sollten?
Als Randnotiz ist hier der Header, der von Nginx zurückgegeben wird, wenn die Datei geändert wurde (es scheint korrekt zu sein):
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
Bearbeiten
Nachdem ich verschiedene Einstellungen mit der expires
Direktive und der Cache-Control
Kopfzeile ausprobiert hatte , führte ich einige weitere Untersuchungen durch. Tatsächlich ist der Server auf einem VirtualBox-Gast-Ubuntu installiert, und die Daten werden aus einem freigegebenen Ordner gelesen, der sich auf dem Mac OSX-Host befindet.
Wenn die Datei von einer IDE (NetBeans) auf dem Host bearbeitet wird, werden anscheinend keine Änderungen angezeigt. Wenn ich sie direkt auf dem Gast (mit VIM) bearbeite, wird sie aktualisiert.
Das Seltsame ist, dass es sich bei HTML-Dateien nicht ähnlich verhält.
Ziemlich rätselhaft.
Edit 2 (ANTWORT)
Tatsächlich lag der Ursprung des Problems eher auf der VirtualBox-Seite. Oder vielmehr ein Konflikt zwischen VirtualBox und der Option "sendfile" des Servers.
Dieser Link VirtualBox Hates Sendfile gab mir die Lösung: Schalten Sie das Sendfile- Flag in der Serverkonfiguration aus :
sendfile off;
Hoffe, dies könnte auch anderen Personen helfen, die VirtualBox für die Entwicklung verwenden. :)
Es gibt einige zusätzliche Informationen im VirtualBox-Forum .