Я прочитал канонический ответ на Какие разрешения должны иметь файлы / папки моего веб-сайта на веб-сервере Linux?
Однако я все еще застрял. Моя установка:
fastcgi_pass unix:/tmp/php5-fpm.sock;
Я создал webadmin
group и добавил к ней и ade, и nginx:
$ groups ade
ade : ade webadmin
$ groups nginx
nginx : nginx webadmin
Я установил владельцем всего сайта я и группу веб-админов: chown ade:webadmin *
...как вы видете:
drwxrwxr-x 2 ade webadmin 4096 Jul 3 13:58 logs
drwxrwxr-x 5 ade webadmin 4096 Jul 4 08:35 public
drwxrwxr-x 4 ade webadmin 4096 Jul 3 16:18 system
drwxrwsr-x 2 ade webadmin 4096 Jul 9 16:13 uploads
Однако, несмотря на то, что разрешения на загрузку равны 775 (rwx для пользователя и группы), nginx и php не могут записывать в папку. Только если я установлю 777, он сможет загружать в него изображения.
Я видел совет по использованию chmod u+w
в приведенном выше каноническом ответе, но не понимаю, почему это необходимо.
Решено:
php-fpm, конечно же, не запускается от имени пользователя nginx. Его можно настроить (в CentOS) в файле /etc/php-fpm.d/www.conf
. Я отредактировал его конфигурацию, добавив строку 45:
44 ;group = nobody
45 group = webadmin
Затем перезапустил:
sudo /etc/init.d/php-fpm restart
Самый разумный подход, который я придумал, заключался в следующем:
Посмотрите /etc/php-fpm.d/www.conf, какого пользователя использует FPM. В моем случае это был «апач». Затем я добавил этого пользователя в группу nginx.
И теперь я могу управлять разрешениями согласованным образом - пользователь - это я, и у меня есть полное разрешение, группа - это nginx, которая прочитала (и r + x для dirs), и она согласована, поэтому оба веб-контента (доступ к nginx) а PHP (доступный через php-fpm) устанавливается группой nginx.
Еще одна веская причина не менять пользователя или группу в конфигурации php-fpm - избежать проблем с разрешениями - php-fpm создавал различные папки / файлы, используя своего предыдущего пользователя. И теперь он не может получить к ним доступ, поскольку больше не использует того же пользователя. Например, данные сеанса PHP (см. / Var / lib / php / session).
Надеюсь, это поможет!