erreur NGINX connectez-vous à php5-fpm.sock failed (13: Permission refusée)
- je mettre à jour nginx 1.4.7 et php pour 5.5.12 , Après que j'ai eu la erreur 502 . Avant que je mette à jour tout fonctionne bien.
nginx-erreur.log
2014/05/03 13:27:41 [crit] 4202#0: *1 connect() to unix:/var/run/php5-fpm.sock failed (13: Permission denied) while connecting to upstream, client: xx.xxx.xx.xx, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "xx.xx.xx.xx"
nginx.conf
user www www;
worker_processes 1;
location / {
root /usr/home/user/public_html;
index index.php index.html index.htm;
}
location ~ [^/].php(/|$) {
fastcgi_split_path_info ^(.+?.php)(/.*)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/home/user/public_html$fastcgi_script_name;
include fastcgi_params;
}
20 réponses
j'ai eu une erreur similaire après la mise à jour de php. PHP a corrigé un bogue de sécurité où o
avait rw
permission au fichier socket.
- Ouvrir
/etc/php5/fpm/pool.d/www.conf
ou/etc/php/7.0/fpm/pool.d/www.conf
, selon votre version. -
Décommenter toutes les autorisations lignes, comme:
listen.owner = www-data listen.group = www-data listen.mode = 0660
-
redémarrer fpm -
sudo service php5-fpm restart
ousudo service php7.0-fpm restart
Note : si votre serveur web fonctionne en tant qu'utilisateur autre que www-data, vous devrez mettre à jour le fichier www.conf
en conséquence
toutes les corrections actuellement mentionnées ici activent à nouveau le trou de sécurité.
ce que j'ai fini par faire est d'ajouter les lignes suivantes à mon fichier de configuration PHP-FPM.
listen.owner = www-data
listen.group = www-data
assurez-vous que www-data est bien l'utilisateur sous lequel NGINX worker est lancé. Pour debian c'est www-data par défaut.
le faire de cette façon ne permet pas le problème de sécurité que ce changement était supposé pour fixer .
la solution de @Xander fonctionne, mais ne persiste pas après un redémarrage.
j'ai constaté que je devais changer listen.mode
en 0660
en /etc/php5/fpm/pool.d/www.conf
.
de l'Échantillon à partir de www.conf:
; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions.
; Default Values: user and group are set as the running user
; mode is set to 0660
;listen.owner = www-data
;listen.group = www-data
;listen.mode = 0660
Edit: Per @Chris Burgess, j'ai changé ceci à la méthode plus sûre.
j'ai supprimé le commentaire pour listen.mode. ,groupe et .le propriétaire:
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
/var / run contient uniquement des informations sur le système en cours d'exécution depuis le dernier démarrage, par exemple les utilisateurs connectés et les démons en cours d'exécution. ( http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard#Directory_structure ).
note de Côté:
Mon php5-fpm -v
, Rapporte: PHP 5.4.28-1+deb.sury.org~precise+1
. Le problème est arrivé après une mise à jour récente.
si vous avez tout essayé dans ce post mais n'avez pas de succès pour faire fonctionner PHP, c'est ce qui l'a corrigé pour mon cas:
assurez-vous que ces lignes ne sont pas comptées dans /etc/php5/fpm/pool.d / www.conf:
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
assurez-vous que /etc/nginx/fastcgi_params ressemble à ceci:
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
ces deux lignes manquaient dans mon/etc/nginx / fastcgi_params, assurez-vous qu'elles sont là!
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
puis, redémarrez php5-fpm et nginx. Devrait faire l'affaire.
en fait," écoutez.mode "devrait être: "0660" et non "0666" comme autre Writable ou autre lisible n'est jamais un bon choix ici.
alors essayez de savoir quel utilisateur/groupe utilise votre serveur web. J'utilise CentOs et il fonctionne comme utilisateur " nginx" Alors ajoutez à votre php-fpm.conf:
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
enfin redémarrer php-fpm
Vérifiez quel utilisateur exécute nginx. Depuis Ubuntu 12.04 NGINX fonctionne par l'utilisateur nginx qui n'est pas un membre de www-data group.
usermod-A-G www-data nginx
et redémarrer les démons Nginx et php5-fpm résout le problème.
Alternative à l'élargissement des permissions dans votre config php, vous pouvez changer l'utilisateur spécifié dans votre config nginx.
Sur la première ligne de votre nginx.extrait de conf ci-dessus, l'utilisateur et le groupe sont spécifiés comme www et www, respectivement.
user www www;
pendant ce temps, votre config php spécifie probablement un utilisateur et un groupe de www-data:
listen.owner = www-data
listen.group = www-data
vous pourriez changer la ligne de votre nginx.conf, à toute de la suivant, alors:
user www-data www;
user www-data www-data; # or any group, really, since you have the user matching
user www www-data; # requires that your php listen.mode gives rw access to the group
il faut également tenir compte de vos piscines individuelles de TPM, le cas échéant.
Je ne comprenais pas pourquoi aucune de ces réponses ne fonctionnait pour moi aujourd'hui. C'était un scénario que j'avais oublié, où j'avais oublié d'écouter.de l'utilisateur et de les écouter.les groupes ont été dupliqués sur une base par pool.
si vous avez utilisé des pools pour différents comptes utilisateurs comme je l'ai fait, où chaque compte utilisateur possède ses processus FPM et sockets, paramétrant seulement la valeur par défaut écouter.propriétaire et écoutez.les options de configuration de groupe vers 'nginx' ne fonctionneront tout simplement pas. Et évidemment, laisser 'nginx' les posséder tous n'est pas acceptable non plus.
pour chaque piscine , assurez-vous que
listen.group = nginx
sinon, vous pouvez laisser la propriété de la piscine et autres.
je viens de recevoir cette erreur à nouveau aujourd'hui que j'ai mis à jour ma machine (avec des mises à jour pour PHP) en cours d'exécution Ubuntu 14.04 . Le fichier de configuration de la distribution /etc/php5/fpm/pool.d/www.conf
est correct et ne nécessite aucune modification actuellement.
j'ai trouvé les erreurs suivantes:
dmesg | grep php
[...]
[ 4996.801789] traps: php5-fpm[23231] general protection ip:6c60d1 sp:7fff3f8c68f0 error:0 in php5-fpm[400000+800000]
[ 6788.335355] traps: php5-fpm[9069] general protection ip:6c5d81 sp:7fff98dd9a00 error:0 in php5-fpm[400000+7ff000]
la chose étrange était que j'ai 2 sites en cours d'exécution qui utilisent PHP-FPM sur cette machine l'un fonctionnait bien et l'autre (une minuscule installation RSS) a donné me a 502, où les deux ont été en cours d'exécution amende avant .
j'ai comparé les deux fichiers de configuration et j'ai trouvé que fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
manquait pour le site affecté.
les deux fichiers de configuration contiennent maintenant le bloc suivant et fonctionnent à nouveau correctement:
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
include /etc/nginx/snippets/fastcgi-php.conf;
}
mise à Jour
Il convient de noter que Ubuntu envoyé deux fastcgi paramètre de fichiers et aussi un extrait de configuration qui est disponible depuis Vivid et aussi dans la version PPA . La solution a été mise à jour en conséquence.
Diff de la fastcgi les fichiers de paramètres:
$ diff -up fastcgi_params fastcgi.conf
--- fastcgi_params 2015-07-22 01:42:39.000000000 +0200
+++ fastcgi.conf 2015-07-22 01:42:39.000000000 +0200
@@ -1,4 +1,5 @@
+fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
exemple de Configuration dans /etc/nginx/snippets/fastcgi-php.conf
# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# Check that the PHP script exists before passing it
try_files $fastcgi_script_name =404;
# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
fastcgi_index index.php;
include fastcgi.conf;
le correctif simple suivant a fonctionné pour moi, contournant les problèmes de permissions possibles avec la socket.
dans votre configuration nginx, définissez fastcgi_pass à:
fastcgi_pass 127.0.0.1:9000;
au lieu de
fastcgi_pass /var/run/php5-fpm.sock;
cela doit correspondre au paramètre listen = dans /etc/php5/fpm/pool.d / www.conf, donc mettez aussi ceci à:
listen = 127.0.0.1:9000;
puis redémarrer php5 - fpm et nginx
service php5-fpm restart
et
service nginx restart
pour plus d'informations, voir: https://wildlyinaccurate.com/solving-502-bad-gateway-with-nginx-php-fpm /
Simple mais efficace..
listen.owner = nginx
listen.group = nginx
chown nginx:nginx /var/run/php-fpm/php-fpm.sock
j'ai corrigé la même question sur Amazon Linux AMI 2016.09 (Centos 7) en prenant les mesures suivantes.
ouvrez votre www.fichiers conf (exemple : sudo nano /etc/php-fpm.d / www.conf) Enfin, trouvez les lignes qui définissent l'écoute.propriétaire et écoutez.groupez et changez leurs valeurs de "nobody" en" nginx":
listen.owner = nginx
listen.group = nginx
listen.mode = 0666
enfin, trouvez les lignes qui positionnent l'utilisateur et le groupe et changez leurs valeurs de "apache" en " nginx":
user = nginx
group = nginx
Redémarrer php-fpm (sudo service de php-fpm redémarrer)
le problème dans mon cas était que le serveur web Nginx fonctionnait en tant qu'utilisateur nginx et que le pool fonctionnait en tant qu'utilisateur www-data.
j'ai résolu le problème en changeant L'utilisateur Nginx est en cours d'exécution dans le fichier /etc/nginx/nginx.conf
(pourrait être différent sur votre système, le mien est Ubuntu 16.04.1)
changement: user nginx;
à: user www-data;
puis redémarrer Nginx: service nginx restart
après la mise à niveau de Ubuntu 14.04 lts à Ubuntu 16.04 lts j'ai trouvé une autre raison pour cette erreur que je n'ai pas vu auparavant.
au cours du processus de mise à niveau, j'avais perdu d'une manière ou d'une autre mon exécutable php5-fpm. Tous les fichiers de configuration étaient intacts et il m'a fallu un certain temps pour réaliser que service php5-fpm start
n'a pas vraiment commencé un processus, car il ne montrait pas d'erreurs.
mon moment de réveil fut quand j'ai remarqué qu'il n'y avait pas de prise fichier dans /var/run/php5-fpm.sock
, comme il se doit, ni ne netstat -an
afficher les processus en écoute sur le port que j'ai essayé, comme une alternative, tout en essayant de résoudre ce problème. Comme le fichier / usr/sbin / php5-fpm n'existait pas, j'étais finalement sur la bonne voie.
afin de résoudre ce problème, j'ai mis à jour php de la version 5.5 à la version 7.0. apt-get install php-fpm
a fait l'affaire comme effet secondaire. Après cela, et l'installation d'autres paquets nécessaires tout était de retour à la normale.
Cette solution de mise à niveau peut avoir des problèmes propres , cependant. Depuis php a évolué un peu, il est possible que le logiciel se casse de manière inimaginable. Donc, même si j'ai suivi cette voie, vous voudrez peut-être garder la version que vous aimez un peu plus longtemps.
heureusement, il semble qu'il y ait une bonne façon pour que , comme décrit sur le Personnaliser le site Windows:
add-apt-repository ppa:ondrej/php
apt-get purge php5-common
apt-get update
apt-get install php5.6
bien que ce soit plus facile, je n'ai pas essayé. J'espère que les prochains jours me diront si j'aurais dû.
vérifier également SELINUX (/etc / selinux):
# getenforce
éteindre:
# setenforce 0
juste pour ajouter, sur CentOS (et probablement Red Hat et Fedora) le fichier pour changer les permissions est à:
/etc / php-fpm.d / www.conf
j'ai changé de système D'exploitation sur mon serveur plusieurs fois en essayant d'obtenir le système le plus confortable.
il fonctionnait très bien la plupart du temps, mais finalement j'ai eu cette erreur de passerelle 502.
j'utilise un socket php fpm pour chaque compte au lieu de garder le même pour tous. Donc, si l'une tombe en panne, au moins les autres applications continuent de fonctionner.
j'avais l'habitude d'avoir l'utilisateur et le groupe www-data. Mais cela a changé sur ma Debian 8 avec les dernières Nginx 1.8 et php5-fpm.
l'utilisateur par défaut est nginx et donc le groupe. Pour en être sûr, la meilleure façon est de vérifier /etc/group et /etc/passwd fichiers. Ces ne peut pas mentir.
c'est là que j'ai trouvé que maintenant j'ai nginx dans les deux et plus www-data.
peut-être que cela peut aider certaines personnes qui essayent encore de savoir pourquoi le message d'erreur continue à apparaître.
ça a marché pour moi.
si vous avez un pool différent par utilisateur, assurez-vous que l'utilisateur et le groupe sont définis correctement dans le fichier de configuration. Vous pouvez trouver l'utilisateur nginx dans /etc/nginx/nginx.fichier conf. nginx groupe est le même que nginx utilisateur.
user = [pool-user]
group = [pool-group]
listen.owner = [nginx-user]
listen.group = [nginx-group]
à ceux qui ont tout essayé dans ce fil et encore coincé: cela a résolu mon problème. J'ai mis à jour /usr/local/nginx/conf/nginx.conf
-
Décommenter la ligne en disant:
user
-
faire
www-data
il devient donc:user www-data;
-
de l'Enregistrer (accès root requis)
-
redémarrer nginx
si vous avez des déclarations
pid = /exécuter/php-fpm.pid
et
listen = /exécuter/php-fpm.pid
dans différents fichiers de configuration, alors root sera propriétaire de ce fichier.