
Tengo un servidor web Ubuntu18.04 con nginx y php-fpm (7.2) instalados.
Hay 6 grupos, cada uno con su propio usuario y grupo:
/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
Cada sitio ejecuta una aplicación laravel, y el directorio de almacenamiento se puede escribir en grupo:
/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 se conecta a través del puerto 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;
}
}
Con esta configuración obtengo
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
Cuando ejecuto chmod a+w en el directorio de almacenamiento, funciona.
También ejecuté 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
Respuesta1
Sospecho que está ejecutando el "proceso maestro" como usuario raíz, pero para cada uno de los grupos ejecuta los procesos "de trabajo" como el usuario especificado. Esto se ve respaldado por el hecho de que tuvo que modificar el directorio de registros para que funcionara.
Un paso de solución de problemas que podría tomar es hacer que uno de los sitios escriba un archivo /tmp/test
y luego verifique a qué usuario pertenece.
También puede escribir un bucle que duerma durante un par de minutos dentro de uno de los grupos y luego ejecutar su ps -ef | grep php
comando para ver si el "proceso maestro" ha generado un proceso como el usuario que espera.