Vagrant/VirtualBox/Apache2奇怪的缓存行为
-
13-11-2019 - |
题
我正在使用Vagrant运行带有Apache2的Ubuntu供电VirtualBox。
除其他外,web服务器从my/vagrant目录提供静态文件。
这在大多数时候都很有效。但是,当我更改共享文件夹上的图像并重新加载网站时,会提供以前版本的图像,但会被截断。
它的工作原理,如果我先从我的共享文件夹中删除旧图片,刷新网站,使图片不显示,然后保存新文件并重新加载网站。
有人知道这个问题吗?我没有安装任何特殊的东西,只是带有mod_rewrite的Apache2和带有Mongo,APC插件,MongoDB以及带有一堆脚本的nodeJS的PHP。
其他提示
这让我发疯了!感谢您发布此信息。对于那些不知道如何更改配置文件的人来说,这是我所做的:
查找文件: $ sudo find -name "nginx.conf"
我的在这里: ./etc/nginx/nginx.conf
所以我运行这个来修改它: $ sudo nano ./etc/nginx/nginx.conf
更改包含的行 sendfile on;
到 sendfile off;
别忘了 exit
和 vagrant reload
!
这是VirtualBox中的旧错误(请参阅:#819 ,#9069 ,#12597 ,#14920 )vboxvfs似乎有一些mmapped访问与同步的文件的问题。
当您在VM之外编辑文件时可能会发生,您希望在VM中看到相同的更改。
要解决此问题,您需要禁用内核SendFile支持,通过禁用 EnableSendfile
选项,无论是在httpd.conf
还是在vhosts文件中,例如
<Directory "/path-to-nfs-files">
EnableSendfile Off
</Directory>
.
对于NFS或SMB已安装文件尤其问题。更改重新加载Apache后。
类似于Nginx
(在nginx.conf
),例如,。
sendfile off;
.
其他解决方法是要记住未编辑主机上的文件,或尝试重新编辑相同的文件,但在VM中。
另一个解决方法包括丢弃Linux PageCache,例如,。
echo 1 > /proc/sys/vm/drop_caches
.
或清除每秒缓存(按此帖子),尝试:
watch -n 1 $(sync; echo 1 > /proc/sys/vm/drop_caches)
.
注意:第1号代表释放pageCache,2对于Dentries和Inodes,3用于PageCache,Dentries和Inodes。
可以通过以下MMAP-Test程序复制上述问题,请参阅: mmap-problem.c
。
我在VirtualBox/Docker/Nginx环境中遇到了类似的问题。
删除Linux pagecache的决定 echo 1 > /proc/sys/vm/drop_caches
工作正常,但看起来很尴尬。
还有指令 sendfile off;
在 nginx.conf
没有解决问题,我试图用它与 expires off;
一起指导,并取得了成功。
所以,我的决定看起来像
sendfile off;
expires off;
对于使用Laravel 5,Barryvdh的Debugbar和Browsersync通过Gulp.Watch,您可能会收到此错误。由于浏览器同步如何代理我的请求,我的错误完全相同。 如果我通过以下方式查看了我的DEV服务器: http://127.0.0.1:3000/laravel/page 我收到了错误 http://127.0.0.1/laravel/page 错误消失了。
我已经用我们的朋友在Browsersync标记了它,他们做了一个很棒的工作。所以,它更像是一个原因而不是解决方案,而不是花时间试图解决它,测试看看这是你的问题,在浪费之前还是更多的时间。
这个问题也类似于本文中找到的错误
这也负责关于CentOS / VirtualBox设置中的CSS文件的奇怪行为。
您可以更改/ vagrant文件夹中的CSS文件的内容,浏览器将显示200的状态(而不是304),这意味着它知道该文件是新的。但内容不会改变。