首页 文章

VirtualBox for Apache中的共享文件夹

提问于
浏览
30

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

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

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

如果我停止 httpdumount ,重新安装,并启动 httpd ,该文件看起来很好 . 只是重新启动httpd没有帮助 .

我该如何调试mount?在 /var/log 没有什么东西跳出来 .

3 回答

  • 1

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

    server.network-backend = "writev"
    

    见:Lighttpd broken when serving from Virtualbox shared folder

  • 2

    我错了;它发生在其他地方,但我注意到它只有.css和.js文件 . 搜索引导我this post讨论了vboxsf和小文件的问题 .

    解决方案是在Apache中设置

    EnableSendfile off
    
  • 53

    要回答具体问题“如何调试mount”:

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

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

    在stracing时,只请求一个截断/损坏的文件 .

    仔细的诊断将揭示它正确地统计文件以获得其长度 . 然后它使用sendfile系统调用来提供它 . 基本上确认sendfile是行为不端,这意味着它必须是虚拟机中的错误 .

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

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

相关问题