VirtualBox for Apache 中的共享文件夹

Posted

技术标签:

【中文标题】VirtualBox for Apache 中的共享文件夹【英文标题】:Shared folder in VirtualBox for Apache 【发布时间】:2011-09-12 00:56:06 【问题描述】:

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

shared    /mnt/shared    vboxsf    defaults,uid=48,gid=48  0 0

当我在主机中编辑文件时,Apache 将始终开始发送带有尾随字符的旧版本文件。在 vim 中,它们显示为 ^@,所以我猜它们是空字符。空字符的数量与我所做的更改数量有关,即使我编辑第一行,空字符也会出现在最后。如果我推测的话,它看起来像一个糟糕的差异。

如果我停止httpdumount,重新挂载并启动httpd,文件看起来很好。只是重新启动 httpd 没有帮助。

我将如何调试挂载?在/var/log 中没有什么对我产生影响。

【问题讨论】:

可以给apache2添加vbox的权限:superuser.com/questions/335322/… uid=48,gid=48 是做什么的。这与我遇到的问题无关。 Vagrant/VirtualBox/Apache2 Strange Cache Behaviour的可能重复 【参考方案1】:

lighttpd 上,解决方案是将以下行添加到lighttpd.conf

server.network-backend = "writev"

见:Lighttpd broken when serving from Virtualbox shared folder

【讨论】:

你是英雄!【参考方案2】:

要回答具体问题“我该如何调试挂载”:

(以下是释义,基于我刚刚对 Virtualbox 中的相同错误引起的问题进行的调查,但使用不同的 Web 服务器)

在诊断出问题发生在 Apache 如何读取虚拟主机内的文件后,我会在虚拟主机内使用“strace -p”来记录 Apache 的系统调用。

在跟踪时,只请求一个被截断/损坏的文件。

仔细诊断会发现它正确地统计了文件以获取其长度。然后它使用 sendfile 系统调用为它提供服务。基本上确认 sendfile 行为不端,这意味着它必须是虚拟机中的错误。

搜索“sendfile virtualbox”会将您带到这些错误。

https://www.virtualbox.org/ticket/9069 https://www.virtualbox.org/ticket/12597

【讨论】:

【参考方案3】:

我错了;它发生在其他地方,但我注意到它仅适用于 .css 和 .js 文件。通过搜索,我找到了this post,它谈到了 vboxsf 和小文件的问题。

解决办法是在Apache中设置

    EnableSendfile off

【讨论】:

这对我不起作用。但是,如果我在 VM 上的 vim 中打开文件并按原样保存,则将其保存在 VM 上后它将起作用。还有其他想法吗? 为了完整性:在 nginx 配置中它是“sendfile off;”

以上是关于VirtualBox for Apache 中的共享文件夹的主要内容,如果未能解决你的问题,请参考以下文章

apache_conf NixOS virtualbox guest添加

计算文本挖掘中的共现词网络

五 坑战中的共chan党

numpy中的共轭转置运算符“.H”

Virtualbox创建虚拟机for Centos7

无法从 MAC 在 VirtualBox 上的 Centos7 上通过 HTTPS 连接到 Apache 服务器