我们正在使用Nginx在开发平台上提供静态文件。由于它是一个开发平台,因此我们希望禁用缓存,以便将每个更改都传播到服务器。VHost的配置非常简单:
server {
server_name static.server.local;
root /var/www/static;
## Default location
location / {
access_log off;
expires 0;
add_header Cache-Control private;
}
}
当我们访问HTML文件(HTTP://static.server.local/test.html),我们没有任何问题:服务器返回一个代码304未修改只要该文件没有改变,和200 OK与响应更改文件后的修改文件。
但是,它与Javascript或CSS文件的行为似乎有所不同。更改文件后,我们将收到200 OK预期的响应,但带有旧文本。
Nginx中是否有内部缓存机制可以解释这种行为?还是我们应该添加的一些配置?
附带说明一下,这是修改文件后Nginx返回的标头(似乎正确):
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
编辑
在使用expires
指令和Cache-Control
标头尝试其他设置之后,我进行了一些进一步的研究。实际上,服务器安装在VirtualBox来宾Ubuntu上,并且从Mac OSX主机上的共享文件夹中读取数据。
如果从主机上的IDE(NetBeans)编辑了文件,则似乎未显示更改,而如果我直接在来宾(使用VIM)上对其进行编辑,则会刷新文件。
奇怪的是,它与HTML文件的行为不同。
相当令人困惑。
编辑2(ANSWER)
确实,问题的根源更多在VirtualBox方面。或更确切地说,VirtualBox与服务器的“ sendfile”选项之间存在冲突。
此链接VirtualBox讨厌Sendfile给我解决方案:将服务器配置中的sendfile标志切换为off:
sendfile off;
希望这也可以帮助其他人使用VirtualBox进行开发。:) VirtualBox论坛
上还有一些其他信息。