Propriétaire de socket nginx et php-fpm
Après une mise à jour de mon système, j'ai couru dans une mauvaise passerelle erreur de ma PHP des applications en cours d'exécution sur Nginx.
1 connect() pour unix:/var/run/php-fcgi-vhostname-php-fcgi-0.chaussette a échoué (13: Permission denied) lors de la connexion à l'amont, le client: xx.xxx.xx.xx, serveur: localhost, demande: "GET /HTTP/1.1", en amont: "fastcgi://unix:/var/run/php-fcgi-vhostname-php-fcgi-0.chaussette:", de l'hôte: "xx.xx.xx.xx"
Le problème est causé par la mauvaise autorisations de php-fpm sockets utilisés, en fait je vois /var/run/php-fcgi.sock
détenue par root:root
mais nginx et php-fpm utilisation en tant qu'utilisateur www-data
.
J'ai déjà modifié le php-fpm config /etc/php-fpm.d/www.conf
avec:
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
mais ça ne résout pas le problème et quand j'ai redémarrer nginx et php-fpm les sockets sont créés avec root:root
en tant qu'utilisateur/groupe.
Le seul moyen que j'ai trouvé pour le fixer est de changer le propriétaire des prises de www-data:www-data manuellement. Mais ce n'est pas une vraie solution, car à chaque fois que je redémarre mes services, j'ai de l'appliquer à nouveau.
Comment puis-je résoudre ce problème? Je suis sur CentOS 6.5
Edit:
- Je utiliser Ajenti-V pour configurer mes vhosts et mon PHP-FPM. Il crée un nouveau socket pour chaque site web/vhost, et elles sont définies dans /etc/php-fpm.conf
Ils ont cette structure:
[vhostname-php-fcgi-0]
user = www-data
group = www-data
listen = /var/run/php-fcgi-vhostname-php-fcgi-0.sock
pm = dynamic
pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 5
Si j'ajoute à chaque entrée de ces chaînes:
listen.owner = www-data
listen.group = www-data
listen.mode = 0666
Tout fonctionne correctement.
Ressemble tellement au www.conf n'est pas inclus (peut-être?). C'est mon php-fpm.conf:
[global]
pid = /var/run/php-fpm/php-fpm.pid
error_log = /var/log/php5-fpm.log
[global-pool]
user = www-data
group = www-data
listen = /var/run/php-fcgi.sock
pm = dynamic
pm.start_servers = 1
pm.max_children = 5
pm.min_spare_servers = 1
pm.max_spare_servers = 5
[vhostname-php-fcgi-0]
user = www-data
group = www-data
listen = /var/run/php-fcgi-vhostname-php-fcgi-0.sock
pm = dynamic
pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 5
source d'informationauteur Fez Vrasta
Vous devez vous connecter pour publier un commentaire.
Fichiers de configuration FPM va lire
/etc/php-fpm.conf
est le fichier de configuration FPM va lire (sur CentOS). Si vous voulez FPM pour lire d'autres fichiers de configuration ainsi, vous devez lui dire que.Vous pouvez le faire en plaçant la ligne
include=/etc/php-fpm.d/*.conf
au bas de/etc/php-fpm.conf
. Il sera alors tout lire dans le répertoire/etc/php-fpm.d
(qui se termine par.conf
).Puis placez le mondial de directives et de la ligne dans
/etc/php-fpm.conf
. Cela pourrait ressembler à quelque chose comme ceci:Et un fichier séparé dans
/etc/php-fpm.d
pour chaque piscine.Exemple
/etc/php-fpm.d/global.conf
:Exemple
/etc/php-fpm.d/vhostname-0.conf
:Directives de prêter attention à
Chaque piscine doit utiliser une autre prise de courant. Si vous avez plusieurs piscines utilisant le même support que vous aurez des problèmes.
Les directives
user
etgroup
de contrôle de l'utilisateur/le groupe qui le FPM processus pour que la piscine est exécuté. Elles ne pas spécifier l'utilisateur/le groupe de la douille.Les directives
listen.owner
etlisten.group
de contrôle de l'utilisateur/le groupe la socket utilise pour cela la piscine.La piscine directives (comme
listen.*
) ne fonctionne que pour les piscines. Si vous ne peut pas les utiliser dans la section globale, vous ont pour préciser pour chaque piscine.Socket autorisations
Les autorisations 0660 sont parfaitement bien quand
listen.owner
etlisten.group
sont les mêmes que pour le serveur web. Vous pourriez même utiliser 0600, mais on pourrait faire valoir que tout utilisateur qui peuvent fonctionner dans le même groupe que le serveur web peut également utiliser le socket, donc je voudrais l'utiliser 0660.NGINX s'exécute en tant qu'utilisateur
nginx
et php5-fpm en tant qu'utilisateurwww-data
. Juste ajouternginx
de groupewww-data
et le problème est résolu, et nginx pouvez accéder à/var/run/php5-fpm.sock
. Fonctionne très bien avec Ubuntu 14.04, nginx 1.7.10, PHP 5.5.9-1ubuntu4.6 (fpm-fcgi):tout le monde!
C'est mon problème aussi.
Je viens de changer mon fpm utilisateur de l'errance, de redémarrer mon piscines et ... c'est fait!
Voici ma conf:
Espère que cela peut aider quelqu'un.
Bonjour à tous et merci pour l'aide, dans mon cas avec Ubuntu server 14.04 nginx et php5-fpm le problème avec php-fpm socket propriétaire par racine résolu en éditant le fichier /etc/php5/fpm/pool.d/www.conf
Décommenter les lignes:
Depuis l'installation de nginx propriétaire et groupe www-data.
Je pense que la meilleure pratique consiste à regarder /etc/nginx/nginx.conf et vérifiez que la première ligne est:
Et utiliser la valeur par défaut de l'utilisateur, Chears !
Juste faire autre chose
Ma Config
Vagrant /Ubuntu 16 /Nginx 1.13 /PHP-FPM 7.1
Modifier la première ligne de l'utilisateur de nginx => l'utilisateur www-data