Файл не найден из-за ошибки nginx на виртуальной машине, где /var/www/ монтируется из файловой структуры хоста

Я пытаюсь настроить довольно сложную среду разработки в качестве виртуального сервера Ubuntu 12.04.

Чтобы я мог редактировать файлы и сразу же видеть изменения при обновлении страницы, как и следовало ожидать в обычной ситуации локальной разработки, у меня есть исходный код php в операционной системе хоста (mint 14) в ~/www/site1 которую я добавил в качестве постоянной общей папки в виртуальный бокс, а затем смонтировал на виртуальной машине

mount -t vboxsf site1 /var/www

если я ls /var/www -la я вижу все php-файлы, но когда я пытаюсь получить доступ к виртуальной машине из браузера, я получаю сообщение об ошибках File not found на странице и error.log для поддоменов сообщает FastCGI отправлено в stderr: «Первичный сценарий неизвестен» при чтении заголовка ответа из восходящего потока». Исключением является субдомен phpmyadmin.virtualmachine, который загружается отлично, поэтому я знаю, что nginx обслуживает правильную файловую структуру для запрошенного субдомена.

В качестве теста я создал поддомен info.virtualmachine, который указывает на /var/test, а index.php — простейший phpinfo(), и это работает, поэтому я могу только предположить, что nginx не читает смонтированную файловую структуру vboxsf /var/www правильно, так как все «локальные» файлы в гостевой ОС доступны для просмотра.

Nginx настроен для работы от имени пользователя root, как и все остальные службы. Это известная ошибка с nginx или что-то, что мне нужно настроить, чтобы позволить nginx видеть смонтированный общий ресурс vboxsf?


person Raath    schedule 15.01.2013    source источник


Ответы (1)


Я нашел ответ на этот вопрос, и оказалось, что это связано с правами доступа к файлам и моим незнанием того, как работает php-fpm.

Для начала я включил пользователя root на виртуальном сервере и, используя супервизор для управления демонами, я настроил их всех на запуск от имени пользователя root. Родительский процесс для php-fpm работает как root, но все дочерние процессы работают как www-data. Установка общего ресурса с правами root привела к тому, что папка стала недоступной для дочерних процессов php-fpm, из-за чего nginx выдал ошибки «файл не найден», а из-за того, как работает vboxsf, я не смог chown или chmod общего ресурса.

Я решил эту проблему, добавив общий ресурс в /etc/fstab с помощью следующей команды:

sharename     /var/www     vboxsf    rw,uid=33,gid=33     0      0

это позволило смонтировать общий ресурс под пользователем www-data, дающим разрешения на чтение для www-data.

person Raath    schedule 20.01.2013