流浪者/VirtualBox/Apache2奇怪的缓存行为

流浪者/VirtualBox/Apache2奇怪的缓存行为,apache2,virtualbox,vagrant,Apache2,Virtualbox,Vagrant,我正在使用Vagrant运行一个带有Apache2的Ubuntu驱动的VirtualBox 除其他外,Web服务器提供my/vagrant目录中的静态文件 这在大多数情况下都很有效。但当我更改共享文件夹中的图像并重新加载网站时,会提供以前版本的图像,但会被截断 如果我先从共享文件夹中删除旧图片,刷新网站以使图片不显示,然后保存新文件并重新加载网站,则该方法有效 有人知道这个问题吗?我没有安装任何特别的东西,只安装了带有mod_rewrite的Apache 2和带有Mongo的PHP、APC插件、

我正在使用Vagrant运行一个带有Apache2的Ubuntu驱动的VirtualBox

除其他外,Web服务器提供my/vagrant目录中的静态文件

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

如果我先从共享文件夹中删除旧图片,刷新网站以使图片不显示,然后保存新文件并重新加载网站,则该方法有效

有人知道这个问题吗?我没有安装任何特别的东西,只安装了带有mod_rewrite的Apache 2和带有Mongo的PHP、APC插件、MongoDB以及带有大量脚本的nodeJS。

找到了答案:

JC

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

启用发送文件关闭

对于nginx: 发送文件

最好的, 米切尔


这让我快发疯了!谢谢你发这个飞利浦。 对于那些不知道如何更改配置文件的人,以下是我所做的:

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

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

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

更改上包含
sendfile的行
发送文件关闭


别忘了
退出
流浪者重新加载

对于通过gulp.watch使用Laravel 5、Barryvdh的调试栏和browserSync的任何人,您可能会遇到此错误。我有完全相同的错误,因为浏览器同步如何代理我的请求。 如果我通过以下方式查看我的开发服务器: 我弄错了 错误消失了

我和我们的朋友在browserSync上做了标记,他们做得很棒。因此,这更多的是一个原因,而不是一个解决方案,但与其花几个小时试图解决它,不如在浪费更多时间之前测试一下这是否是您的问题


此问题也类似于

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


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

这是VirtualBox中的老错误(请参见:,),其中vboxvfs似乎在对同步文件的MMAP访问方面存在一些问题

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

为了解决这个问题,您需要禁用内核sendfile支持,通过在
httpd.conf
或vhosts文件中禁用来向客户端交付文件,例如

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

另一种解决方法是记住不要在主机上编辑文件,或者尝试在VM内重新编辑同一文件


另一个解决方法包括删除Linux页面缓存,例如

echo 1 > /proc/sys/vm/drop_caches
或要每秒清除缓存(根据),请尝试:

注意:数字1表示释放页面缓存,2表示dentries和inode,3表示页面缓存、dentries和inode



上述问题可以通过以下mmap测试程序复制,请参阅:。

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

删除Linux pagecache
echo 1>/proc/sys/vm/drop_cache
的决定效果很好,但看起来很尴尬

还有指令
sendfile offnginx.conf
中的code>没有解决问题,我尝试在
expires关闭时使用它指令在一起,并且它是成功的

所以,我的决定看起来像

sendfile off;
expires off;

为了解释这个奇怪的问题,我找到了你的答案。同样值得注意的是,如果您可以使用NFS来共享文件,它将是一个更可靠、更快的解决方案,并且不会遇到这样的问题:哦,我的天哪,非常感谢您发布这篇文章。我一整天都在给这头牦牛刮胡子我非常感谢你。我想要回到我生命的最后4个小时。非常感谢你。@NathanLong+1“剃掉这头牦牛”我也有同样的问题,但有一个文本(json)文件。在我尝试Nginx并发现它与Apache有相同的问题后,我才能够进行足够具体的搜索来找到这个答案。它应该被关闭,对吗?可以确认
echo 1>/proc/sys/vm/drop\u缓存
修复了流浪者/VirtualBox设置上的问题。这似乎是一个众所周知的问题:至少它只有六年的历史。
watch -n 1 $(sync; echo 1 > /proc/sys/vm/drop_caches)
sendfile off;
expires off;