php-fpm не работает как пользователь, указанный в пуле

php-fpm не работает как пользователь, указанный в пуле

У меня есть веб-сервер Ubuntu18.04 с установленными nginx и php-fpm (7.2).

Существует 6 пулов, каждый со своим пользователем и группой:

/etc/php/7.2/fpm# grep -r ^user * 
php.ini:user_dir =
pool.d/dev3.website.com.conf:user = dev3_app
pool.d/dev1.website.com.conf:user = dev1_app
pool.d/dev4.website.com.conf:user = dev4_app
pool.d/dev6.website.com.conf:user = dev6_app
pool.d/dev5.website.com.conf:user = dev5_app
pool.d/dev2.website.com.conf:user = dev2_app

/etc/php/7.2/fpm# grep -r ^group * 
pool.d/dev3.website.com.conf:group = dev3_app
pool.d/dev1.website.com.conf:group = dev1_app
pool.d/dev4.website.com.conf:group = dev4_app
pool.d/dev6.website.com.conf:group = dev6_app
pool.d/dev5.website.com.conf:group = dev5_app
pool.d/dev2.website.com.conf:group = dev2_app

На каждом сайте запущено приложение Laravel, при этом каталог хранилища доступен для записи группе:

/var/www/dev3.website.com# ls -la
total 2236
drwxr-xr-x  20 root dev3_app    4096 Jul 17 21:39 .
drwxr-xr-x   9 root root        4096 Jul 17 21:33 ..
...
drwxrwxr-x   7 root dev3_app    4096 Jul 17 21:29 storage

nginx подключается через TCP-порт:

server {
    listen         80;
    server_name    dev3.website.com;

    root /var/www/dev3.website.com/public;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ [^/]\.php(/|$) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        if (!-f $document_root$fastcgi_script_name) {
            return 404;
        }

        fastcgi_pass 127.0.0.1:9001;
        fastcgi_index index.php;

        # include the fastcgi_param setting
        include fastcgi_params;

        # SCRIPT_FILENAME parameter is used for PHP FPM determining
        #  the script name. If it is not set in fastcgi_params file,
        # i.e. /etc/nginx/fastcgi_params or in the parent contexts,
        # please comment off following line:
        fastcgi_param  SCRIPT_FILENAME   
        $document_root$fastcgi_script_name;
    }
}

С этой конфигурацией я получаю

The stream or file "/var/www/dev3.website.com/storage/logs/laravel-2019-07-17.log" could not be opened: failed to open stream: Permission denied

Когда я запускаю chmod a+w для каталога хранилища, это работает.

Я также выполнил команду ps -ef |grep php:

root      2468     1  0 00:53 ?        00:00:05 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
root     11897 10961  0 22:12 pts/0    00:00:00 grep --color=auto php 

решение1

Я подозреваю, что он запускает "главный процесс" как пользователь root, но для каждого из пулов он запускает "рабочие" процессы как указанный пользователь. Это также подтверждается тем фактом, что вам пришлось chmod каталога журналов, чтобы заставить его работать.

Для устранения неполадок можно попытаться записать файл на один из сайтов, /tmp/testа затем проверить, какому пользователю он принадлежит.

Вы также можете написать цикл, который будет спать пару минут внутри одного из пулов, а затем запустить команду, ps -ef | grep phpчтобы проверить, породил ли «главный процесс» процесс от имени ожидаемого вами пользователя.

Связанный контент