Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VirtualBox for Apache中的共享文件夹_Apache_Virtualbox_Mount_Shared Directory - Fatal编程技术网

VirtualBox for Apache中的共享文件夹

VirtualBox for Apache中的共享文件夹,apache,virtualbox,mount,shared-directory,Apache,Virtualbox,Mount,Shared Directory,我的主机是ArchLinux,我在CentOS客户机中运行Apache。我在共享文件夹中有vhost配置和所有站点代码。为了能够将vhost配置放在共享文件夹中,我将共享文件夹装载为apache:apache shared /mnt/shared vboxsf defaults,uid=48,gid=48 0 0 当我在主机中编辑文件时,Apache将始终如一地开始发送带有尾随字符的文件的旧版本。在vim中,它们显示为^@,所以我猜它们是空字符。空字符的数量与我所做更改的数

我的主机是ArchLinux,我在CentOS客户机中运行Apache。我在共享文件夹中有vhost配置和所有站点代码。为了能够将vhost配置放在共享文件夹中,我将共享文件夹装载为apache:apache

shared    /mnt/shared    vboxsf    defaults,uid=48,gid=48  0 0
当我在主机中编辑文件时,Apache将始终如一地开始发送带有尾随字符的文件的旧版本。在vim中,它们显示为^@,所以我猜它们是空字符。空字符的数量与我所做更改的数量有关,即使我编辑第一行,空字符也会显示在末尾。如果我要推测的话,这看起来是一个糟糕的差别

如果我停止
httpd
umount
,重新装载,然后启动
httpd
,文件看起来很好。只是重新启动httpd没有帮助


如何调试挂载?在
/var/log
中没有任何东西向我扑来,我错了;它发生在其他地方,但我注意到只有.css和.js文件。通过搜索,我找到了一个关于vboxsf和小文件的问题

解决方案是在Apache中设置

    EnableSendfile off

lighttpd
上,解决方案是在
lighttpd.conf

server.network-backend = "writev"

请参阅:

以回答特定问题“如何调试挂载”:

(以下是根据我刚刚对Virtualbox中的同一个bug引起的问题所做的调查而进行的解释,但使用的是不同的web服务器)

在诊断了Apache如何读取虚拟主机中的文件的问题之后,我将在虚拟主机中使用“strace-p”来记录Apache的系统调用

在扫描时,只请求一个被截断/损坏的文件

仔细的诊断会发现它正确地统计了文件的长度。然后使用sendfile系统调用为其提供服务。基本上确认sendfile的行为不正常,这意味着它一定是虚拟机中的一个bug

搜索“sendfilevirtualbox”会让您找到这些bug


这对我不起作用。但是,如果我在VM上的vim中打开该文件并将其保存为原样,则在将其保存到VM上后,它将工作。还有其他想法吗?为了完整性:在Nginx config中,它是“sendfile off”;您可以将vbox的权限添加到apache2:
uid=48,gid=48
就是这样做的。这与我遇到的问题无关。你可能是英雄的翻版!