J'ai un script PHP qui crée un répertoire et génère une image dans le répertoire. Cela fonctionnait très bien sous Apache mais nous avons récemment décidé de passer à NGINX pour utiliser davantage notre RAM limitée. J'utilise la commande PHP mkdir () pour créer le répertoire:
mkdir(dirname($path['image']['server']), 0755, true);
Après le passage à NGINX, je reçois l'avertissement suivant:
Warning: mkdir(): Permission denied in ...
J'ai déjà vérifié toutes les autorisations des répertoires parents, j'ai donc déterminé que je devrais probablement changer l'utilisateur NGINX ou PHP-FPM mais je ne sais pas comment faire (je n'ai jamais eu à spécifier d'utilisateur autorisations pour Apache). Je n'arrive pas à trouver beaucoup d'informations à ce sujet. Toute aide est la bienvenue!
(Remarque: Outre ce petit blocage, le passage à NGINX a été assez transparent; je l'utilise pour la première fois et il n'a fallu que 10 minutes environ pour être opérationnel avec NGINX. Maintenant, je repasse les plis.)
Exécutez nginx et php-fpm en tant que www: www
Modifiez nginx.conf et définissez tilisateur sur www www;
Si le processus maître est exécuté en tant que root, nginx définira setuid ()/setgid () sur USER/GROUP. Si GROUP n'est pas spécifié, alors nginx utilise le même nom que USER. Par défaut, il s'agit de personne nobody et nobody ou nogroup group ou --user = USER et --group = GROUP du script ./configure.
Modifiez php-fpm.conf et définissez l'utilisateur et le groupe sur www
.
user - Utilisateur Unix des processus. "Www-data" par défaut
group - Groupe de processus Unix. "Www-data" par défaut
Dans Ubuntu 14.04 le fichier à modifier tilisateur et groupe dans PHP-FPM est: /etc/php5/fpm/pool.d/www.conf
. Dans ce fichier, modifiez ces paramètres:
user = www
group = www
listen.owner = www
listen.group = www
Pour répondre à votre question réelle, il suffit de modifier la ligne user
dans nginx.conf
ainsi:
user [username];
Exemple:
user www-data;
L'utilisateur préféré pour l'exécution de Nginx diffère en fait d'un système d'exploitation à l'autre. Parfois, Nginx est censé fonctionner comme www-data
. D'autres fois, il est censé s'exécuter en tant que nobody
.
Sur certains systèmes d'exploitation (tels que Windows), cela n'a même pas d'importance, et la ligne user
dans nginx.conf
peut être mis en commentaire ou entièrement exclu.
La solution suivante a fonctionné en changeant l'utilisateur Web avec moi en utilisant Ubuntu 18.04 LTS
, nginx 1.14
et php7.2-fpm
.
Éditer /etc/nginx/nginx.conf
et définissez l'utilisateur sur webuser;
user webuser;
Éditer /etc/php/7.2/fpm/pool.d/www.conf
.
user = webuser
group = webuser
...
listen.owner = webuser
listen.group = webuser