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;
}
J'ai eu une erreur similaire après la mise à jour php. PHP a corrigé un security bug où o
avait le droit rw
sur le fichier de socket.
/etc/php5/fpm/pool.d/www.conf
ou /etc/php/7.0/fpm/pool.d/www.conf
, selon votre version. Décommentez toutes les lignes d'autorisation, comme:
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
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.
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 .
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.
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.
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
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.
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
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;
}
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;
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.
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/
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
Simple mais fonctionne ..
listen.owner = nginx
listen.group = nginx
chown nginx:nginx /var/run/php-fpm/php-fpm.sock
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)
Vérifiez également SELINUX (/ etc/selinux):
# getenforce
éteignez-le:
# setenforce 0
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.
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
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]
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
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.
Pour ceux qui ont tout essayé dans ce fil et qui sont toujours bloqués: Cela a résolu mon problème
Décommentez la ligne en disant user
faites-le www-data
pour qu'il devienne: user www-data;
Enregistrez-le (accès root requis)
Redémarrez nginx
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
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.
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.