Общая папка в VirtualBox для Apache - PullRequest
30 голосов
/ 10 июня 2011

Мой хост-компьютер - ArchLinux, и я использую Apache в качестве гостя CentOS.У меня есть конфигурация vhost и весь код сайта в общей папке.Чтобы иметь возможность поместить конфигурацию vhost в общую папку, я смонтировал общую папку как apache: apache.

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

Когда я редактирую файлы на хосте, Apache последовательно начинает отправлять старые версиифайл с последними символами.В vim они отображаются как ^ @, поэтому я думаю, что они нулевые символы.Количество нулевых символов связано с количеством изменений, которые я делаю, даже если я редактирую первую строку, нулевые символы появляются в конце.Если бы я размышлял, это выглядело бы как плохая разница.

Если я остановил httpd, umount, перемонтировал и запустил httpd, файл выглядит нормально.Просто перезапуск httpd не помогает.

Как мне отладить монтирование?Ничто не выскочило на меня в /var/log.

Ответы [ 3 ]

53 голосов
/ 28 июня 2011

Я был не прав;это происходило в другом месте, но я заметил, что это было только с файлами .css и .js.Поиск привел меня к этой записи , в которой говорится о проблеме с vboxsf и небольшими файлами.

Решение - установить в Apache

    EnableSendfile off
2 голосов
/ 27 декабря 2012

Вкл. lighttpd решение состоит в том, чтобы добавить следующую строку в lighttpd.conf

server.network-backend = "writev"

См .: Lighttpd не работает при обслуживании из общей папки Virtualbox

1 голос
/ 05 ноября 2014

Чтобы ответить на конкретный вопрос «как мне отладить монтирование»:

(ниже приводится перефразировка, основанная на только что проведенном мною расследовании проблемы, вызванной той же ошибкой в ​​Virtualbox, но с другим веб-сервером)

После диагностики проблемы где-то в том, как Apache читает файлы внутри виртуального хоста, я бы использовал «strace -p» внутри виртуального хоста для регистрации системных вызовов Apache.

Во время обработки запросите только один усеченный / поврежденный файл.

Тщательная диагностика покажет, что файл правильно определяет длину файла. И затем он обслуживает его с помощью системного вызова sendfile. По сути, подтверждение того, что sendfile ведет себя неправильно, означает, что это должна быть ошибка в виртуальной машине.

Поиск по «sendfile virtualbox» приводит вас к этим ошибкам.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...