Phi*_*ess 64 virtualbox apache2 vagrant
我正在使用Vagrant在Apache2上运行一个支持Ubuntu的VirtualBox.
除其他外,Web服务器提供来自my/vagrant目录的静态文件.
这在大多数情况下效果很好.但是,当我更改共享文件夹上的图像并重新加载网站时,会提供先前版本的图像,但它会被截断.
如果我先从共享文件夹中删除旧图片,刷新网站以便图片不显示,然后保存新文件并重新加载网站,它就可以工作.
有谁知道这个问题?我没有安装任何特殊功能,只有带有mod_rewrite的Apache 2和带有Mongo的AP,APC插件,MongoDB以及带有一堆脚本的nodeJS.
Phi*_*ess 133
在这里找到答案:
JC,
您所看到的可能是因为服务于静态文件的服务器正在使用"sendfile()"系统调用,该系统被VirtualBox文件系统破坏.您需要在服务器中禁用sendfile()用法.对于Apache:
EnableSendfile关闭
对于nginx:sendfile off;
最好,米切尔
这让我疯了!感谢发布这个Philipp.对于那些不知道如何更改配置文件的人,这是我做的:
要查找文件: $ 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支持,通过禁用vhosts文件中或vhosts文件中的EnableSendfile选项将文件传送到客户端httpd.conf,例如
<Directory "/path-to-nfs-files">
EnableSendfile Off
</Directory>
Run Code Online (Sandbox Code Playgroud)
对于NFS或SMB安装的文件,这尤其麻烦.更改后重新加载Apache.
类似于Nginx(in nginx.conf),例如
sendfile off;
Run Code Online (Sandbox Code Playgroud)
其他解决方法是记住不要编辑主机上的文件,或尝试重新编辑同一文件,但要在VM中.
另一种解决方法包括删除Linux pagecache,例如
echo 1 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)
或者每秒清除缓存(根据这篇文章),尝试:
watch -n 1 $(sync; echo 1 > /proc/sys/vm/drop_caches)
Run Code Online (Sandbox Code Playgroud)
注意:数字1代表释放pagecache,2代表dentries和inode,3代表pagecache,dentries和inode.
上面的问题可以通过以下mmap-test程序复制,参见:mmap-problem.c.