Я настроил nginx для использования виртуальной машины HipHop версии 3.0 в режиме fast-cgi. Несколько фактов:
- Я работаю на Ubuntu 13.10
- Nginx и hhvm запускаются от имени пользователя
www-data
. - Пользователь www-data находится в группе
fooers
- Корень сервера для nginx — это каталог
/srv/foo
с одним файломindex.php
в нем. - Групповым владением
/srv/foo
является группаfooers
/srv/foo
разрешения установлены на770
Когда я пытаюсь просмотреть эту страницу, я получаю 404, но в журналах hhvm или nginx нет ошибок. Однако, если я изменю разрешения на 775
на /srv/foo
, страница будет обслуживаться hhvm
и nginx
, как и ожидалось.
Кроме того, если я изменю группу по умолчанию для пользователя www-data на группу fooers, она будет работать с разрешениями 770. Кажется, что это не работает, только если это не группа по умолчанию для пользователя.
В чем проблема?!?!? Кто-нибудь знает, почему hhvm/nginx, работающий как пользователь www-data с групповым доступом к каталогу, не может получить доступ, когда разрешения равны 770?
Чтобы подтвердить свое здравомыслие и убедиться, что мои группы и разрешения такие, как я думаю, после запуска служб я запускаю
$> ps -aux
Я вижу, как и ожидалось, процесс hhvm и процессы nginx, работающие как www-data
:
www-data 3484 .... /usr/bin/hhvm --config /etc/hhvm/server.ini --user www-data --mode daemon -vPidFile=/var/run/hhvm/pid
www-data 3617 ... nginx: worker process
Когда я проверяю группы, я вижу:
$> groups www-data
www-data : www-data fooers
Когда я проверяю каталог, я могу подтвердить 100% доступ к группе и владельцу:
$> ls -al
total 16
drwxr-xr-x 5 root root 4096 Mar 30 15:57 .
drwxr-xr-x 22 root root 4096 Mar 30 11:52 ..
drwxrwx--- 2 root fooers 4096 Mar 30 15:39 foo
Если я проверю содержимое файла как пользователь www-data
, мне разрешено:
$> sudo -u www-data ls -al /srv/foo
total 12
drwxrwx--- 2 root fooers 4096 Mar 30 15:39 .
drwxr-xr-x 5 root root 4096 Mar 30 15:57 ..
-rw-rw-r-- 1 root fooers 38 Mar 30 15:39 index.php
Если я попытаюсь выполнить описанное выше с пользователем, не входящим в группу fooers, это не удастся.
Вот мой /etc/hhvm/server.ini
:
; php options
pid = /var/run/hhvm/pid
; hhvm specific
hhvm.server.port = 9000
hhvm.server.type = fastcgi
hhvm.server.default_document = index.php
hhvm.log.level = Warning
hhvm.log.always_log_unhandled_exceptions = true
hhvm.log.runtime_error_reporting_level = 8191
hhvm.log.use_log_file = true
hhvm.log.file = /var/log/hhvm/error.log
hhvm.repo.central.path = /var/run/hhvm/hhvm.hhbc
hhvm.mysql.typed_results = false
Я действительно надеюсь, что это не что-то глупое и очевидное, что я упустил из виду...
Вот мой блок местоположения nginx для веб-корня:
location ~ \.php$ {
root /srv/foo
fastcgi_keep_conn on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /srv/foo$fastcgi_script_name;
include fastcgi_params;
}
ps -aux
выглядит так:/usr/bin/hhvm --config /etc/hhvm/server.hdf --user www-data --mode daemon -vServer.Type=fastcgi -vServer.Port=9010
- person PKeidel   schedule 31.03.2014ps
немного обрезался. Я устанавливаю тип на fastcgi и порт на 9000 в файлеini
. - person Ray   schedule 31.03.2014hhvm-fastcgi
- person Ray   schedule 31.03.2014/srv/foo
. Но ваш hhvm repo.central.path указывает на/var/run/hhvm/hhvm.hhbc
. Таким образом, вы должны изменить этот путь к файлу/каталогу, а не /srv/foo/*. Вы уже пробовали это? И когда вы выполняете сканирование портов nmap, ваш порт9000
указан как открытый? - person PKeidel   schedule 31.03.2014hhvm.repo.central.path = /var/run/hhvm/hhvm.hhbc
- это место, где он кэширует обработанный байт-код, а не расположение исходных файлов php, поэтому это не должно быть затронуто, поскольку/srv/foo
- это место для моих исходных файлов php. Кроме того, я убедился, что HHVM находится на уровне 9000. - person Ray   schedule 31.03.2014/srv/foo
в качестве своего каталога hhvm www? - person PKeidel   schedule 31.03.2014/usr/bin/hhvm --config /etc/hhvm/server.ini --user www-data --mode daemon -vPidFile=/var/run/hhvm/pid
. server.ini такой же, как у вас. Может быть, chmod 777 для всех файлов журнала может помочь?!? - person PKeidel   schedule 04.04.2014