Estamos usando o Nginx para servir arquivos estáticos em uma plataforma de desenvolvimento. Como é uma plataforma de desenvolvimento, gostaríamos de desativar o cache para que cada alteração seja propagada para o servidor. A configuração do VHost é bastante simples:
server {
server_name static.server.local;
root /var/www/static;
## Default location
location / {
access_log off;
expires 0;
add_header Cache-Control private;
}
}
Quando acessamos um arquivo HTML ( http: //static.server.local/test.html ), não temos problema: o servidor retorna um código 304 Não modificado , desde que o arquivo não seja alterado e uma resposta 200 OK com o arquivo modificado quando o arquivo é alterado.
No entanto, parece se comportar de maneira diferente com um arquivo Javascript ou CSS. Depois que o arquivo é alterado, obtemos uma resposta 200 OK, conforme o esperado, mas com o texto antigo.
Existe um mecanismo de cache interno no Nginx que possa explicar esse comportamento? Ou alguma configuração que devemos adicionar?
Como uma observação lateral, aqui está o cabeçalho retornado pelo Nginx quando o arquivo foi modificado (parece correto):
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
Depois de tentar configurações diferentes com a expires
diretiva e o Cache-Control
cabeçalho, fiz algumas investigações adicionais. De fato, o servidor está instalado em um Ubuntu convidado do VirtualBox e os dados são lidos em uma pasta compartilhada que está no host do Mac OSX.
Se o arquivo for editado a partir de um IDE (NetBeans) no host, parece que as alterações não aparecerão; se eu o editar diretamente no convidado (usando o VIM), ele será atualizado.
O estranho é que não se comporta de maneira semelhante com arquivos HTML.
Bastante intrigante.
Editar 2 (RESPOSTA)
Na verdade, a origem do problema estava mais no lado do VirtualBox. Ou melhor, um conflito entre o VirtualBox e a opção "sendfile" do servidor.
Este link VirtualBox deia Sendfile me deu a solução: mudar o sendfile bandeira na configuração do servidor para fora :
sendfile off;
Espero que isso também ajude outra pessoa usando o VirtualBox para desenvolvimento. :)
Há algumas informações adicionais no fórum do VirtualBox .