502 bad gateway nginx

j'obtiens une mauvaise passerelle 502 avec nginx en utilisant spawn fcgi pour spawn php5-cgi.

j'utilise ceci pour étendre une instance sur le démarrage du serveur en utilisant la ligne suivante dans rc.local 151920920"

/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid

probablement j'obtiens l'erreur parce que le spawn-fcgi / php5-cgi meurt et il n'y a plus rien d'écoute là-bas pour analyser php.

Je n'obtiens rien dans les journaux que je peux voir n'importe où, je suis à court d'idées (et nouveau à cette configuration avec nginx)

55
demandé sur karthikr 2010-11-23 06:01:39

13 réponses

j'ai exécuté mon localhost et la page a affiché le message 502 bad gateway . Cela m'a aidé:

  1. Modifier /etc/php5/fpm/pool.d/www.conf
  2. changer listen = /var/run/php5-fpm.sock en listen = 127.0.0.1:9000
  3. S'assurer que l'emplacement est correctement réglé dans nginx.conf .
  4. Exécuter sudo service php5-fpm restart

Peut-être que ça vous aidera.

source: http://wildlyinaccurate.com/solving-502-bad-gateway-with-nginx-php-fpm

46
répondu fadil 2018-04-07 03:59:35

l'erreur 502 apparaît parce que nginx ne peut pas passer à php5-cgi. Vous pouvez essayer de reconfigurer php5-cgi pour utiliser des sockets unix plutôt que tcp .. ensuite, ajustez la configuration du serveur pour pointer vers la socket au lieu du tcp ...

ps auxww | grep php5-cgi #-- is the process running?  
netstat -an | grep 9000 # is the port open? 
9
répondu sdolgy 2011-04-15 11:32:04

passez à /etc/php5/fpm/pool.d/www.conf et si vous utilisez des sockets ou si cette ligne n'est pas cimentée

listen = /var/run/php5-fpm.sock

définir quelques autres valeurs aussi: -

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

n'oubliez pas de redémarrer php-fpm et nginx. Assurez-vous que vous utilisez le même nom de propriétaire et de groupe nginx.

8
répondu techvineet 2014-06-30 07:13:05

vous devez faire correspondre les paramètres pour PHP-FPM et Nginx pour communiquer sur les sockets ou TCP.

alors allez à /etc/php5/fpm/pool.d/www.conf et cherchez cette ligne:

listen = /var/run/php5-fpm.sock

puis passer à /etc/nginx/nginx.conf

Cherchez ceci:

upstream php {
    server unix:/var/run/php5-fpm.socket;
}

Correspondent à ces valeurs et vous devriez être tous ensemble.

7
répondu KJ Prince 2015-02-27 01:18:00

si vous utilisez un serveur linux, assurez-vous que votre configuration IPTABLES est correcte.

Exécuter sudo iptables -L -n , vous recevrez une liste des ports ouverts. S'il n'y a pas de règle Iptables pour ouvrir le port desservant le script fcgi, vous recevrez une erreur 502. La règle Iptables qui ouvre le port correct doit être listée avant toute règle qui rejette catégoriquement tous les paquets (c'est-à-dire une règle du formulaire "REJECT ALL -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable ou similaire))

sur ma configuration, pour ouvrir correctement le port, j'ai dû exécuter cette commande (supposons que mon serveur fcgi tourne au port 4567):

sudo iptables -I INPUT 1 -p tcp --dport 4567 -j ACCEPT

avertissement: ceci ouvrira le port 4567 au monde entier.

donc il pourrait être préférable de faire quelque chose comme ceci:

   sudo iptables-save >> backup.iptables
   sudo iptables -D INPUT 1 #Delete the previously entered rule
   sudo iptables -I INPUT 1 -p tcp --dport 8080 -s localhost -j ACCEPT # Add new rule

cette façon de faire a éliminé l'erreur 502 pour moi.

5
répondu tjb 2012-04-22 15:37:55

changement

fastcgi_pass    unix:/var/run/php-fpm.sock;

à

fastcgi_pass    unix:/var/run/php5-fpm.sock;
4
répondu user2816137 2014-01-18 06:10:41

quand j'ai fait sudo /etc/init.d/php-fpm start j'ai eu l'erreur suivante:

Starting php-fpm: [28-Mar-2013 16:18:16] ERROR: [pool www] cannot get uid for user 'apache'

je suppose que /etc/php-fpm.d/www.conf a besoin de savoir que l'utilisateur que le serveur web est en cours d'exécution comme et suppose qu'il est apache quand, pour nginx, il est en fait nginx, et doit être changé.

2
répondu neubert 2013-03-28 16:25:45

vous pouvez faire que nginx ignore client abandonne en utilisant:

location / {
  proxy_ignore_client_abort on;
}
2
répondu Meekohi 2013-05-27 12:56:47

j'ai eu le même problème lors de la configuration d'un serveur Ubuntu. Il s'avère que j'avais le problème en raison de permissions incorrectes sur le fichier socket.

si vous avez un problème de permission, vous pouvez décommenter les lignes suivantes de: /etc/php5/fpm/pool.d / www.conf

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

alternativement, bien que je ne le recommande pas, vous pouvez donner des permissions de lecture et d'écriture à tous les groupes en utilisant la commande suivante.

sudo chmod go+rw /var/run/php5-fpm.sock
2
répondu Ali Haris 2016-08-24 07:31:42

essayez de désactiver les modules XCache ou apc. Semble causer un problème avec certaines versions qui sauvegardent des objets sur une variable de session.

1
répondu h0tw1r3 2014-08-26 17:10:24

espérons que ce tuyau sauvera la vie de quelqu'un d'autre. Dans mon cas, le problème était que je manquais de mémoire, mais à peine, était difficile d'y penser. Gaspillage de 3h. Je recommande l'exécution:

sudo htop

ou

sudo free -m

...avec l'exécution de requêtes problématiques sur le serveur pour voir si votre mémoire ne s'épuise pas. Et si cela fonctionne comme dans mon cas, vous devez créer un fichier de pagination (sauf si vous en avez déjà un).

j'ai suivi ce tutoriel pour créer un fichier de pagination sur le serveur Ubuntu 14.04 et ça a très bien fonctionné: http://www.cyberciti.biz/faq/ubuntu-linux-create-add-swap-file/

1
répondu Rav 2015-02-12 15:40:11

si vous êtes sur Ubuntu, et tout ce qui précède vous a échoué, AppArmor est le plus susceptible de blâmer.

voici un bon guide pour le fixer: https://www.digitalocean.com/community/tutorials/how-to-create-an-apparmor-profile-for-nginx-on-ubuntu-14-04

pour faire court:

vi /etc/apparmor.d/nginx

ou

sudo aa-complain nginx
sudo service nginx restart

voir tout fonctionne bien... puis

sudo aa-logprof

j'ai toujours eu des problèmes avec Nginx ne pouvant pas lire l'erreur.log, même si elle avait toutes les permissions possibles, y compris dans Apparomor. Je suppose que ça a quelque chose à voir avec l'ordre des entrées, ou une interaction avec Passenger ou PHP-Fpm... Je n'ai plus le temps de résoudre ce problème et je suis retourné à Apache pour l'instant. (Apache fonctionne beaucoup mieux pour info.)

AppArmor laisse Nginx faire ce qu'il veut si vous retirez le profil:

 rm /etc/apparmor.d/nginx
 service apparmor reload

choquant, mais à peine surprenant, beaucoup de messages sur la fixation des erreurs Nginx recourt à désactiver complètement SELinux ou supprimer AppArmor. C'est une mauvaise idée parce que vous perdez la protection de tout un tas de logiciels. Simplement supprimer le profil Nginx est une meilleure façon de résoudre vos fichiers de configuration. Une fois que vous savez que le problème n'est pas dans vos fichiers de configuration Nginx, vous pouvez prendre le temps de créer un profil AppArmor approprié.

Sans profil AppArmor, surtout si vous exécutez quelque chose comme Passenger too, je donne à votre serveur environ un mois pour revenir en arrière.

1
répondu dagelf 2017-01-11 09:00:28

installation similaire ici et ressemble à un bug dans mon code. Au début de mon application j'ai cherché L'URL offensante et cela a fonctionné: echo '<html>test</html>'; exit();

dans mon cas, il s'avère que le problème était une variable non initialisée qui n'a échoué que dans des circonstances particulières.

0
répondu PJ Brunet 2012-02-10 21:14:04