web-dev-qa-db-fra.com

erreur de nginx lors de la connexion à php5-fpm.sock (13: autorisation refusée)

Je mets à jour nginx à 1.4.7 et php à 5.5.12 , après que j’ai eu l’erreur 502 . Avant que je mette à jour tout fonctionne bien.

nginx-error.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;
        }
260
peter

J'ai eu une erreur similaire après la mise à jour php. PHP a corrigé un security bugo avait le droit rw sur le fichier de socket.

  1. Ouvrez /etc/php5/fpm/pool.d/www.conf ou /etc/php/7.0/fpm/pool.d/www.conf, selon votre version. 
  2. Décommentez toutes les lignes d'autorisation, comme:

    listen.owner = www-data
    listen.group = www-data
    listen.mode = 0660
    
  3. Redémarrez fpm - Sudo service php5-fpm restart ou Sudo 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.

583
Xander

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 le travailleur nginx est exécuté. Pour Debian, c’est www-data par défaut.

Le faire de cette manière ne permet pas le problème de sécurité que ce changement était censé résoudre .

100
artooro

La solution de @ Xander fonctionne, mais ne persiste pas après un redémarrage. 

J'ai trouvé que je devais changer listen.mode en 0660 dans /etc/php5/fpm/pool.d/www.conf

Exemple 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 pour la méthode plus sécurisée.

J'ai supprimé le commentaire pour listen.mode, .group et .owner:

listen.owner = www-data
listen.group = www-data
listen.mode = 0660

/ var/run ne contient que des informations sur le système en cours d'exécution depuis le dernier démarrage, par exemple, les utilisateurs actuellement connectés et les démons en cours d'exécution. ( http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard#Directory_structure ).

Note latérale:

Mes rapports php5-fpm -v: PHP 5.4.28-1+deb.sury.org~precise+1. Le problème est également survenu après une récente mise à jour.

45
Eric C

Si vous avez tout essayé dans cet article mais que vous ne réussissez pas à obtenir PHP, cela a été résolu comme suit:

Assurez-vous que ces lignes ne sont pas commenté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 étaient absentes de mes/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;

Ensuite, redémarrez php5-fpm et nginx. Devrait faire l'affaire.

37
aMMT

En fait, "listen.mode" devrait être: "0660" et non "0666", car un autre élément enregistrable ou lisible n'est jamais un bon choix ici.

Essayez donc de savoir quel utilisateur/groupe votre serveur Web est exécuté. J'utilise CentOs et il fonctionne sous le nom d'utilisateur "nginx" Ajoutez donc à votre php-fpm.conf:

listen.owner = nginx
listen.group = nginx
listen.mode = 0660

enfin redémarrer php-fpm

23
CRHenkie

Vérifiez quel utilisateur exécute nginx. Depuis Ubuntu 12.04, nginx est exécuté par un utilisateur nginx qui n'est pas membre du groupe www-data.

usermod -a -G www-data nginx

et le redémarrage des démons nginx et php5-fpm résout le problème.

22
Çağatay Gürtürk

Au lieu d'élargir les autorisations dans votre configuration php, vous pouvez modifier l'utilisateur spécifié dans votre configuration nginx.

Sur la première ligne de l'extrait nginx.conf ci-dessus, l'utilisateur et le groupe sont spécifiés respectivement par www et www.

user  www www;

En attendant, votre configuration php spécifie probablement un utilisateur et un groupe de www-data:

listen.owner = www-data
listen.group = www-data

Vous pouvez modifier la ligne de votre nginx.conf en l’une des options suivantes:

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
11
JellicleCat

Je viens de recevoir cette erreur encore aujourd'hui alors que je mettais à jour ma machine (avec les mises à jour pour PHP) sous 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 pour le moment. 

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 est que j'ai 2 sites fonctionnant sous PHP-FPM sur cette machine, l'un fonctionnait bien et l'autre (une installation Tiny Tiny RSS) me donnait un 502, où les deux fonctionnaient correctement avant.

J'ai comparé les deux fichiers de configuration et découvert que fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; était manquant 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;
}

Mettre à jour

Il convient de noter qu'Ubuntu fournit deux fichiers de paramètres liés à fastcgi ainsi qu'un extrait de configuration disponible depuis Vivid et également dans la version PPA . La solution a été mise à jour en conséquence.

Diff des fichiers de paramètres fastcgi:

$ 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;

Extrait 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;
6
LiveWireBT

Vous devez également prendre en compte vos pools FPM individuels, le cas échéant.

Je ne pouvais pas comprendre pourquoi aucune de ces réponses ne fonctionnait pour moi aujourd'hui. C’était pour moi un scénario incertain, dans lequel j’avais oublié que listen.user et listen.group étaient dupliqués par pool.

Si vous avez utilisé des pools pour différents comptes d'utilisateur comme je l'ai fait, chaque compte d'utilisateur étant propriétaire de ses processus et sockets FPM, définir uniquement les options de configuration par défaut listen.owner et listen.group sur 'nginx' ne fonctionnera tout simplement pas. Et bien évidemment, laisser nginx les posséder toutes n'est pas acceptable non plus.

Pour chaque pool , assurez-vous que

listen.group = nginx

Sinon, vous pouvez laisser la propriété de la piscine, par exemple.

6
Ted Phillips

Le correctif simple suivant a fonctionné pour moi, en contournant d'éventuels problèmes d'autorisations avec le socket.

Dans votre configuration nginx, définissez fastcgi_pass sur:

fastcgi_pass   127.0.0.1:9000;

Au lieu de 

fastcgi_pass   /var/run/php5-fpm.sock;

Cela doit correspondre au paramètre listen = de /etc/php5/fpm/pool.d/www.conf, donc définissez également ceci sur:

listen = 127.0.0.1:9000;

Puis redémarrez 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/

4
supershnee

Le problème dans mon cas était que le serveur Web Nginx s’exécutait en tant qu’utilisateur nginx et que le pool s’exécutait en tant qu’utilisateur www-data.

J'ai résolu le problème en changeant l'utilisateur sur lequel Nginx est exécuté dans le fichier /etc/nginx/nginx.conf (peut être différent sur votre système, le mien est Ubuntu 16.04.1)

Changement: user nginx;

à: user www-data;

puis redémarrez Nginx: service nginx restart

4
EarthMind

Simple mais fonctionne ..

listen.owner = nginx
listen.group = nginx

chown nginx:nginx /var/run/php-fpm/php-fpm.sock
3
Terry Lin

J'ai corrigé le même problème sur Amazon Linux AMI 2016.09 (Centos 7) en procédant comme suit.

Ouvrez vos fichiers www.conf (Exemple: Sudo nano /etc/php-fpm.d/www.conf) Enfin, recherchez les lignes qui définissent listen.owner et listen.group et modifiez leurs valeurs de "personne" à "nginx":

listen.owner = nginx
listen.group = nginx
listen.mode = 0666

Enfin, recherchez les lignes qui définissent l'utilisateur et le groupe et modifiez leurs valeurs de "Apache" à "nginx":

user = nginx
group = nginx

Redémarrez php-fpm (redémarrage php-fpm du service Sudo)

3
Nanhe Kumar

Vérifiez également SELINUX (/ etc/selinux):

# getenforce

éteignez-le:

# setenforce 0
1
alchemist

Après la mise à niveau d’Ubuntu 14.04 lts à Ubuntu 16.04 lts, ​​j’ai trouvé une autre raison de cette erreur que je n’avais jamais vue auparavant.

Au cours du processus de mise à niveau, j'avais en quelque sorte perdu mon exécutable php5-fpm. Tous les fichiers de configuration étaient intacts et il m'a fallu un certain temps pour comprendre que service php5-fpm start ne démarrait pas vraiment un processus, car il ne contenait aucune erreur.

Mon moment de réveil a été lorsque j'ai remarqué qu'il n'y avait pas de fichier de socket dans /var/run/php5-fpm.sock, comme il se doit, et netstat -an n'a pas non plus montré de processus d'écoute sur le port que j'ai essayé comme solution de rechange tout en essayant de résoudre ce problème. Comme le fichier/usr/sbin/php5-fpm était également inexistant, j'étais enfin 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 eu l'effet escompté. Après cela et l'installation des autres paquets nécessaires, tout était rentré dans l'ordre.


_ {Cette solution de mise à niveau peut avoir ses propres problèmes}, cependant. Puisque le php a un peu évolué, il est possible que le logiciel casse de manière inimaginable. Donc, même si j’ai emprunté ce chemin, vous voudrez peut-être conserver la version que vous aimez un peu plus longtemps.

Heureusement, il semble exister un moyen élégant pour cela , comme décrit sur le site Personnaliser Windows:

add-apt-repository ppa:ondrej/php
apt-get purge php5-common
apt-get update
apt-get install php5.6

Une solution plus ordonnée que cela puisse être, je n'ai pas essayé cela. Je pense que les prochains jours me diront si je devrais le faire.

1
sankari

Il suffit de voir /etc/php5/php-fpm.conf pid = /var/run/php5-fpm.pid IS fichier PID

Dans le fichier /etc/php5/fpm/pool.d/www.conf

listen = /var/run/php5-fpm.sock IS fichier SOCKET

si vous égalisez listen (pid = /var/run/php5-fpm.sock and listen = /var/run/php5-fpm.sock) -> mauvais réglages et terminez le réglage /etc/php5/fpm/pool.d/www.conf

user = nginx
group = nginx
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
1
Bogdik

Si vous avez différents pools par utilisateur, assurez-vous que l'utilisateur et le groupe sont correctement définis dans le fichier de configuration. Vous pouvez trouver l'utilisateur nginx dans le fichier /etc/nginx/nginx.conf. Le groupe nginx est identique à l'utilisateur nginx.

user = [pool-user]
group = [pool-group]
listen.owner = [nginx-user]
listen.group = [nginx-group]
0
Jaman

Pour ajouter, sur CentOS (et probablement Red Hat et Fedora), le fichier pour lequel les autorisations sont modifiées est:

/etc/php-fpm.d/www.conf

0
Adrian Stride

J'ai changé d'OS sur mon serveur à plusieurs reprises pour essayer d'obtenir le système le plus confortable.

Cela fonctionnait très bien la plupart du temps, mais finalement, j'ai eu cette erreur 502 Gateway.

J'utilise un socket php fpm pour chaque compte au lieu de garder le même pour tous. Donc, si l'une se bloque, au moins les autres applications continuent à fonctionner.

J'avais l'habitude d'avoir utilisateur et groupe www-data. Mais cela a changé sur mon Debian 8 avec les dernières versions de Nginx 1.8 et php5-fpm.

L'utilisateur par défaut est nginx et le groupe également. Pour en être sûr, le meilleur moyen est de vérifier les fichiers/etc/group et/etc/passwd. Ceux-ci ne peuvent pas mentir.

C'est là que j'ai trouvé que maintenant j'ai nginx dans les deux et non plus www-data. 

Cela peut peut-être aider certaines personnes qui tentent encore de comprendre pourquoi le message d'erreur continue de s'afficher.

Cela a fonctionné pour moi.

0
Marc Quattrini

Pour ceux qui ont tout essayé dans ce fil et qui sont toujours bloqués: Cela a résolu mon problème

  1. Décommentez la ligne en disant user

  2. faites-le www-data pour qu'il devienne: user www-data;

  3. Enregistrez-le (accès root requis)

  4. Redémarrez nginx

0
Davy

Dans mon cas, php-fpm ne fonctionnait pas du tout, donc je devais juste démarrer le service ????

service php7.3-fpm start
#on ubuntu 18.04
0
Tech Nomad

La chose la plus importante ici est quel utilisateur utilise nginx alors vous avez besoin de le spécifier aussi

dans votre nginx.conf

user www-data;
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;
        }

dans votre www.conf

listen.owner = www-data
listen.group = www-data
;listen.mode = 0660

dans votre cas, l'utilisateur et le groupe sont "www", remplacez-les simplement.

  • redémarrer nginx et php fpm
0
Erenss

Si vous avez des déclarations 

pid = /run/php-fpm.pid

et

listen = /run/php-fpm.pid

dans différents fichiers de configuration, alors root sera propriétaire de ce fichier.

0
IvanTheFirst