it-swarm.com.de

nginx 502 schlechtes Gateway

Ich bekomme ein 502 Bad Gateway mit Nginx, wenn ich Spawn-fcgi zum Spawn von php5-cgi verwende.

Ich benutze dies, um eine Instanz auf dem Server zu überspannen, indem Sie die folgende Zeile in rc.local verwenden

/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

vermutlich bekomme ich den fehler, weil das spawn-fcgi/php5-cgi stirbt und dort nichts mehr zu hören ist, um php zu parsen.

Ich bekomme nichts in den Protokollen, die ich irgendwo sehen kann. Ich habe keine Ideen (und ist neu in diesem Setup mit nginx).

57
Joel Wickard

Ich habe meine localhost ausgeführt und auf der Seite wurde die 502 bad gateway-Nachricht angezeigt. Das hat mir geholfen:

  1. /etc/php5/fpm/pool.d/www.conf bearbeiten
  2. listen = /var/run/php5-fpm.sock in listen = 127.0.0.1:9000 ändern
  3. Stellen Sie sicher, dass der Speicherort richtig in nginx.conf festgelegt ist.
  4. Sudo service php5-fpm restart ausführen

Vielleicht wird es dir helfen.

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

49
fadil

Der 502-Fehler wird angezeigt, weil nginx nicht an php5-cgi übergeben werden kann. Sie können php5-cgi rekonfigurieren, um Unix-Sockets im Gegensatz zu tcp zu verwenden. Stellen Sie dann die Serverkonfiguration so ein, dass sie auf den Socket anstelle des tcp zeigt. 

ps auxww | grep php5-cgi #-- is the process running?  
netstat -an | grep 9000 # is the port open? 
9
sdolgy

Gehen Sie zu /etc/php5/fpm/pool.d/www.conf und wenn Sie Sockets verwenden oder diese Zeile unkommentiert ist 

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

Setze auch ein paar andere Werte: -

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

Vergessen Sie nicht, PHP-Fpm und Nginx neu zu starten. Stellen Sie sicher, dass Sie denselben Nginx-Besitzer und denselben Gruppennamen verwenden.

8
techvineet

Sie müssen die Einstellungen für PHP-FPM und Nginx anpassen, um über Sockets oder TCP zu kommunizieren. 

Gehen Sie zu /etc/php5/fpm/pool.d/www.conf und suchen Sie nach dieser Zeile:

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

Dann gehe zu /etc/nginx/nginx.conf

Suchen Sie nach diesem: 

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

Passen Sie diese Werte an und Sie sollten alle festgelegt sein. 

7
KJ Prince

Wenn Sie einen Linux-Server ausführen, stellen Sie sicher, dass Ihre IPTABLES-Konfiguration korrekt ist.

Führen Sie Sudo iptables -L -n aus, Sie erhalten eine Liste Ihrer offenen Ports. Wenn keine Iptables-Regel zum Öffnen des Ports für das fcgi-Skript vorhanden ist, erhalten Sie einen 502-Fehler. Die Iptables-Regel, die den richtigen Port öffnet, muss vor einer Regel, die alle Pakete kategorisch ablehnt (d. H. Eine Regel der Form "REJECT ALL -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable oder Ähnliches), aufgeführt sein

Um den Port richtig zu öffnen, musste ich bei meiner Konfiguration diesen Befehl ausführen (vorausgesetzt, mein Fcgi-Server läuft an Port 4567):

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

WARNUNG: Dadurch wird Port 4567 für die ganze Welt geöffnet.

Es könnte also besser sein, so etwas zu tun:

   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

Dadurch wurde der 502-Fehler für mich entfernt.

5
tjb

veränderung

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

zu

fastcgi_pass    unix:/var/run/php5-fpm.sock;
4
user2816137

Sie können Nginx dazu bringen, Clientabbrüche zu ignorieren:

location / {
  proxy_ignore_client_abort on;
}
2
Meekohi

Bei Sudo /etc/init.d/php-fpm start bekam ich folgende Fehlermeldung:

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

Ich denke, /etc/php-fpm.d/www.conf muss den Benutzer wissen, dass der Webserver als läuft und nimmt an, dass es Apache ist, wenn es für nginx eigentlich nginx ist und geändert werden muss.

2
neubert

Ich hatte das gleiche Problem beim Einrichten eines Ubuntu-Servers. Es stellte sich heraus, dass ich das Problem aufgrund falscher Berechtigungen für die Socket-Datei hatte.

Wenn das Problem aufgrund eines Berechtigungsproblems auftritt, können Sie die folgenden Zeilen aus den folgenden Zeilen entfernen: /etc/php5/fpm/pool.d/www.conf

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

Obwohl ich dies nicht empfehlen könnte, können Sie alternativ allen Gruppen Lese- und Schreibberechtigungen erteilen, indem Sie den folgenden Befehl verwenden.

Sudo chmod go+rw /var/run/php5-fpm.sock
2
Ali Haris

Deaktivieren Sie die xcache- oder apc-Module. Anscheinend verursacht ein Problem bei einigen Versionen das Speichern von Objekten in einer Sitzungsvariablen.

1
h0tw1r3

Hoffe, dieser Tipp wird das Leben eines anderen retten. In meinem Fall bestand das Problem darin, dass mir das Gedächtnis aufgebraucht war, aber nur geringfügig, schwer darüber nachzudenken. 3h verschwendet. Ich empfehle zu laufen:

Sudo htop

oder

Sudo free -m

... zusammen mit dem Ausführen problematischer Anforderungen auf dem Server, um festzustellen, ob der Speicher nicht ausreicht. Wenn es in meinem Fall gefällt, müssen Sie eine Auslagerungsdatei erstellen (sofern Sie nicht bereits eine haben).

Ich bin diesem Tutorial gefolgt, um eine Swap-Datei auf Ubuntu Server 14.04 zu erstellen, und es hat gut funktioniert: http://www.cyberciti.biz/faq/ubuntu-linux-create-add-swap-file/

1
Rav

Wenn Sie sich auf Ubuntu befinden und alle oben genannten Dinge Sie versagt haben, ist AppArmor am wahrscheinlichsten dafür verantwortlich. 

Hier ist eine gute Anleitung, wie Sie das Problem beheben können: https://www.digitalocean.com/community/tutorials/how-to-create-an-apparmor-profile-for-nginx-on-ubuntu-14-04

Um es kurz zu machen: 

vi /etc/apparmor.d/nginx

Oder 

Sudo aa-complain nginx
Sudo service nginx restart

Sehen Sie, wie alles gut läuft ... dann

Sudo aa-logprof

Ich hatte immer noch Probleme damit, dass Nginx error.log nicht lesen konnte, obwohl es alle möglichen Berechtigungen hatte, auch in Apparomor. Ich vermute, es hat etwas mit der Reihenfolge der Einträge zu tun oder mit Interaktion mit Passenger oder PHP-Fpm ... Ich habe keine Zeit mehr, dies zu beheben, und bin erstmal wieder zu Apache zurückgekehrt. (Apache ist zu FYI viel besser.) 

AppArmor lässt Nginx einfach das tun, was er will, wenn Sie nur das Profil entfernen:

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

Erschreckend, aber kaum überraschend, müssen viele Beiträge zur Behebung von Nginx-Fehlern dazu führen, dass SELinux vollständig deaktiviert oder AppArmor entfernt wird. Das ist eine schlechte Idee, weil Sie den Schutz vor einer Menge Software verlieren. Durch das Entfernen des Nginx-Profils können Sie die Konfigurationsdateien besser behandeln. Sobald Sie wissen, dass das Problem nicht in Ihren Nginx-Konfigurationsdateien enthalten ist, können Sie sich die Zeit nehmen, um ein korrektes AppArmor-Profil zu erstellen. 

Ohne ein AppArmor-Profil, insbesondere wenn Sie auch so etwas wie Passenger ausführen, gebe ich Ihrem Server etwa einen Monat Zeit, um sich zu verstecken. 

1
dagelf

Ähnliches Setup hier und es sieht aus, als wäre es nur ein Fehler in meinem Code. Beim Start meiner App habe ich nach der fehlerhaften URL gesucht und das hat funktioniert: echo '<html>test</html>'; exit(); 

In meinem Fall stellte sich heraus, dass das Problem eine nicht initialisierte Variable war, die nur unter bestimmten Umständen fehlgeschlagen ist. 

0
PJ Brunet