Vagrant / VirtualBox / Apache2奇怪的缓存行为

时间:2012-02-28 09:10:31

标签: apache2 virtualbox vagrant

我使用Vagrant使用Apache2运行基于Ubuntu的VirtualBox。

除其他外,网络服务器提供来自我/ vagrant目录的静态文件。

这在大多数情况下效果很好。但是当我更改共享文件夹上的图像并重新加载网站时,会提供先前版本的图像,但它会被截断。

如果我首先从共享文件夹中删除旧图片,刷新网站以便不显示图片,然后保存新文件并重新加载网站,这是有效的。

有人知道这个问题吗?我没有安装任何特殊功能,只有带有mod_rewrite的Apache 2和带有Mongo的AP,APC插件,MongoDB以及带有一堆脚本的nodeJS。

6 个答案:

答案 0 :(得分:133)

找到答案here

  

JC,

     

您所看到的可能是因为服务器提供静态文件   正在使用“sendfile()”系统调用,它被VirtualBox文件破坏   系统。您需要在服务器中禁用sendfile()用法。对于Apache:

     

关闭EnableSendfile

     

对于nginx:   sendfile off;

     

最佳,   米切尔

答案 1 :(得分:8)

这让我发疯了!感谢发布这个Philipp。 对于那些不知道如何更改配置文件的人,我就是这样做的:

要查找文件:$ sudo find -name "nginx.conf"

我在这里:./etc/nginx/nginx.conf

所以我运行它来修改它:$ sudo nano ./etc/nginx/nginx.conf

将包含sendfile on;的行更改为sendfile off;

别忘了exitvagrant reload

答案 2 :(得分:6)

这是VirtualBox中的旧错误(请参阅:#819#9069#12597#14920)其中vboxvfs似乎在对文件进行mmapped访问方面存在一些问题同步。

当您在VM外部编辑文件时,可能会发生这种情况,并且您希望在VM中看到相同的更改。

要解决此问题,您需要通过在httpd.conf或vhosts文件中禁用EnableSendfile option来禁用内核sendfile支持以将文件传送到客户端,例如

<Directory "/path-to-nfs-files">
  EnableSendfile Off
</Directory>

对于NFS或SMB安装的文件,这尤其麻烦。更改后重新加载Apache。

Similar for Nginx(在nginx.conf中),例如

sendfile off;

其他解决方法是记住不要编辑主机上的文件,或尝试重新编辑同一文件,但要在VM中。

另一种解决方法包括删除Linux pagecache,例如

echo 1 > /proc/sys/vm/drop_caches

或者每秒清除一次缓存(根据this post),请尝试:

watch -n 1 $(sync; echo 1 > /proc/sys/vm/drop_caches)

注意:数字1代表释放pagecache,2代表dentries和inode,3代表pagecache,dentries和inode。

以下问题可以通过以下mmap-test程序复制,请参阅:mmap-problem.c

答案 3 :(得分:4)

我在VirtualBox / Docker / Nginx环境中遇到了类似的问题。

删除Linux pagecache echo 1 > /proc/sys/vm/drop_caches的决定运行正常,但看起来很尴尬。

sendfile off;中的指令nginx.conf也没有解决问题,我尝试将它与expires off;指令一起使用,并且成功了。

所以,我的决定看起来像是

sendfile off;
expires off;

答案 4 :(得分:3)

对于使用Laravel 5,Barryvdh的Debugbar和browserSync via gulp.watch的任何人,您可能会收到此错误。我有完全相同的错误,因为浏览器同步代理了我的请求。 如果我通过以下方式查看我的开发服 http://127.0.0.1:3000/laravel/page我收到了错误 http://127.0.0.1/laravel/page错误消失了。

我在浏览器同步中与我们的朋友进行了标记,他们做了很棒的工作。所以,这不是解决问题的理由,而是花费数小时试图修复它,在浪费更多时间之前测试一下这是否是你的问题。

此问题也与the errors found in this article

类似

答案 5 :(得分:0)

这也是CentOS / VirtualBox设置中有关CSS文件的奇怪行为的原因。

您可以更改/ vagrant文​​件夹中CSS文件的内容,浏览器将显示状态200(而不是304),这意味着它知道该文件是新的。但内容不会改变。