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)
13 réponses
j'ai exécuté mon localhost
et la page a affiché le message 502 bad gateway
. Cela m'a aidé:
- Modifier
/etc/php5/fpm/pool.d/www.conf
- changer
listen = /var/run/php5-fpm.sock
enlisten = 127.0.0.1:9000
- S'assurer que l'emplacement est correctement réglé dans nginx.conf .
- 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
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?
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.
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.
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.
changement
fastcgi_pass unix:/var/run/php-fpm.sock;
à
fastcgi_pass unix:/var/run/php5-fpm.sock;
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é.
vous pouvez faire que nginx ignore client abandonne en utilisant:
location / {
proxy_ignore_client_abort on;
}
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
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.
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/
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.
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.