Estamos utilizando Nginx para servir archivos estáticos en una plataforma de desarrollo. Como es una plataforma de desarrollo, nos gustaría deshabilitar el almacenamiento en caché para que cada cambio se propague al servidor. La configuración del VHost es bastante simple:
server {
server_name static.server.local;
root /var/www/static;
## Default location
location / {
access_log off;
expires 0;
add_header Cache-Control private;
}
}
Cuando accedemos a un archivo HTML ( http: //static.server.local/test.html ), no tenemos ningún problema: el servidor devuelve un código 304 No modificado siempre que el archivo no se modifique, y una respuesta 200 OK con el archivo modificado cuando se cambia el archivo.
Sin embargo, parece comportarse de manera diferente con un archivo Javascript o CSS. Una vez que se cambia el archivo, obtenemos una respuesta 200 OK como se esperaba, pero con el texto anterior.
¿Existe un mecanismo de caché interno en Nginx que podría explicar este comportamiento? ¿O alguna configuración que deberíamos agregar?
Como nota al margen, aquí está el encabezado devuelto por Nginx cuando el archivo ha sido modificado (parece correcto):
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
Editar
Después de probar diferentes configuraciones con la expires
directiva y el Cache-Control
encabezado, realicé algunas investigaciones adicionales. De hecho, el servidor está instalado en un Ubuntu VirtualBox invitado, y los datos se leen desde una carpeta compartida que se encuentra en el host Mac OSX.
Si el archivo se edita desde un IDE (NetBeans) en el host, parece que los cambios no aparecen, mientras que si lo edito directamente en el invitado (usando VIM), se actualiza.
Lo extraño es que no se comporta de manera similar con los archivos HTML.
Muy desconcertante.
Edición 2 (RESPUESTA)
De hecho, el origen del problema estaba más en el lado de VirtualBox. O más bien un conflicto entre VirtualBox y la opción "sendfile" del servidor.
Este enlace VirtualBox odia Sendfile me dio la solución: cambiar el sendfile indicador en la configuración del servidor de fuera :
sendfile off;
Espero que esto también pueda ayudar a otras personas que usan VirtualBox para el desarrollo. :)
Hay información adicional en el foro VirtualBox .