Oli*_*ppe 93 nginx virtualbox cache static-content
我们正在使用 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;
}
}
Run Code Online (Sandbox Code Playgroud)
当我们访问一个 HTML 文件(http://static.server.local/test.html)时,我们没有问题:只要文件没有改变,服务器就会返回一个代码304 Not Modified,并返回一个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
Run Code Online (Sandbox Code Playgroud)
编辑
在使用expires指令和Cache-Control标题尝试不同的设置后,我进行了一些进一步的调查。实际上,服务器安装在 VirtualBox 来宾 Ubuntu 上,数据是从 Mac OSX 主机上的共享文件夹读取的。
如果文件是从主机上的 IDE (NetBeans) 编辑的,似乎不会出现更改,而如果我直接在来宾上编辑它(使用 VIM),它会刷新。
奇怪的是它与 HTML 文件的行为不同。
很令人费解。
编辑 2 (ANSWER)
事实上,问题的根源更多是在 VirtualBox 方面。或者更确切地说是 VirtualBox 和服务器的“sendfile”选项之间的冲突。
此链接VirtualBox Hates Sendfile给了我解决方案:将服务器配置中的sendfile标志切换为off:
sendfile off;
Run Code Online (Sandbox Code Playgroud)
希望这也可以帮助其他人使用 VirtualBox 进行开发。:) VirtualBox 论坛
上有一些附加信息。
lor*_*key 59
由于答案以某种方式隐藏在问题中 - 这是 VirtualBox 环境中 nginx 作为独立答案的解决方案。
在您的 nginx 配置(通常为 /etc/nginx/nginx.conf)或 vhost 配置文件中,将sendfile参数更改为off:
sendfile off;
Run Code Online (Sandbox Code Playgroud)
虽然它sendfile是 Nginx 声名鹊起的核心(极快的低级静态文件服务效率),但它可能是本地开发的祸根,例如经常更改且需要重新加载的 Javascript。尽管如此,Nginx 的 sendfile 很聪明,可能不是大多数人的问题;还要检查浏览器的“禁用缓存”选项!
ant*_*set 15
将您的过期标签设置为
expires off;
Run Code Online (Sandbox Code Playgroud)
并且它根本不应该设置任何过期标头,也可能是您的浏览器缓存文件不正确
| 归档时间: |
|
| 查看次数: |
104964 次 |
| 最近记录: |