Ich aktualisiere nginx auf 1.4.7 und PHP auf 5.5.12 . Danach bekam ich den 502 Fehler . Vor dem Update funktioniert alles gut.
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;
}
Ich hatte einen ähnlichen Fehler nach dem PHP-Update. PHP behebt einen Sicherheitsfehler wobei o
rw
für die Socket-Datei berechtigt war.
/etc/php5/fpm/pool.d/www.conf
oder /etc/php/7.0/fpm/pool.d/www.conf
, je nach Ihrer Version. Kommentieren Sie alle Berechtigungszeilen wie:
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
Fpm neu starten - Sudo service php5-fpm restart
oder Sudo service php7.0-fpm restart
Note: Wenn Ihr Webserver mit Ausnahme von www-data als Benutzer ausgeführt wird, müssen Sie die www.conf
-Datei entsprechend aktualisieren
Alle hier genannten Korrekturen ermöglichen grundsätzlich die Sicherheitslücke.
Am Ende füge ich meiner PHP-FPM-Konfigurationsdatei die folgenden Zeilen hinzu.
listen.owner = www-data
listen.group = www-data
Stellen Sie sicher, dass www-data tatsächlich der Benutzer ist, unter dem der Nginx-Worker ausgeführt wird. Bei debian sind es standardmäßig www-data.
Auf diese Weise wird das -Sicherheitsproblem, das durch diese Änderung behoben werden sollte, nicht aktiviert.
Die Lösung von @ Xander funktioniert, bleibt aber nach einem Neustart nicht bestehen.
Ich fand, dass ich listen.mode
in 0660
in /etc/php5/fpm/pool.d/www.conf
ändern musste.
Probe von 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, ich habe dies auf die sicherere Methode geändert.
Ich habe den Kommentar für listen.mode, .group und .owner entfernt:
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
/ var/run enthält nur Informationen über das laufende System seit dem letzten Start, z. B. aktuell angemeldete Benutzer und laufende Daemons. ( http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard#Directory_structure ).
Randnotiz:
Mein php5-fpm -v
berichtet: PHP 5.4.28-1+deb.sury.org~precise+1
. Das Problem trat auch nach einem kürzlich erfolgten Update auf.
Wenn Sie alles in diesem Beitrag versucht haben, aber keinen Erfolg haben, um PHP zum Laufen zu bringen, wurde dies für meinen Fall behoben:
Stellen Sie sicher, dass Sie diese Zeilen in /etc/php5/fpm/pool.d/www.conf nicht kommentiert haben:
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
Stellen Sie sicher, dass/etc/nginx/fastcgi_params so aussieht:
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;
Diese beiden Zeilen fehlten in meinen/etc/nginx/fastcgi_params. Stellen Sie sicher, dass sie vorhanden sind!
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
Starten Sie dann php5-fpm und nginx neu. Sollte den Trick tun.
Tatsächlich sollte "listen.mode" lauten: "0660" und nicht "0666", da Other Writable oder Other Readable hier keine gute Wahl ist.
Versuchen Sie also herauszufinden, welchen Benutzer/welche Gruppe Ihr Webserver ausführt. Ich benutze CentOs und es läuft als Benutzer "nginx" Fügen Sie also Ihre php-fpm.conf hinzu:
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
starte php-fpm endlich neu
Prüfen Sie, welcher Benutzer nginx ausführt. Ab Ubuntu 12.04 läuft nginx von einem nginx-Benutzer, der kein Mitglied der www-data-Gruppe ist.
usermod -a -G www-data nginx
und ein Neustart der Daemons nginx und php5-fpm löst das Problem.
Alternativ zur Erweiterung der Berechtigungen in Ihrer PHP-Konfiguration können Sie den in Ihrer Nginx-Konfiguration angegebenen Benutzer ändern.
In der ersten Zeile Ihres nginx.conf-Ausschnitts oben werden der Benutzer und die Gruppe als www bzw. www angegeben.
user www www;
Inzwischen gibt Ihre PHP-Konfiguration wahrscheinlich einen Benutzer und eine Gruppe von WWW-Daten an:
listen.owner = www-data
listen.group = www-data
Sie können die Zeile in Ihrer nginx.conf folgendermaßen ändern:
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
Ich habe gerade diese Fehlermeldung erhalten, als ich meinen Rechner (mit Updates für PHP) mit Ubuntu 14.04 aktualisiert habe. Die Verteilungskonfigurationsdatei /etc/php5/fpm/pool.d/www.conf
ist in Ordnung und erfordert derzeit keine Änderungen.
Ich habe folgende Fehler gefunden:
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]
Das Merkwürdige war, dass ich zwei Sites habe, die PHP-FPM auf dieser Maschine verwenden. Eine lief gut und die andere (eine Tiny Tiny RSS-Installation) gab mir eine 502, auf der beide in Ordnung war. Vor.
Ich habe beide Konfigurationsdateien verglichen und festgestellt, dass fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
für die betroffene Site fehlt.
Beide Konfigurationsdateien enthalten jetzt den folgenden Block und laufen wieder einwandfrei:
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
include /etc/nginx/snippets/fastcgi-php.conf;
}
Es ist zu beachten, dass Ubuntu zwei fastcgi-bezogene Parameterdateien und einen Konfigurations-Snippet enthält, der seit Vivid und auch in der PPA -Version verfügbar ist. Die Lösung wurde entsprechend aktualisiert.
Vergleich der fastcgi-Parameterdateien:
$ 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;
Konfigurations-Snippet in /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;
Gegebenenfalls müssen auch Ihre individuellen FPM-Pools berücksichtigt werden.
Ich konnte nicht herausfinden, warum keine dieser Antworten heute für mich funktionierte. Dies war ein Szenario, in dem ich vergessen hatte, dass listen.user und listen.group auf Pool-Basis doppelt vorhanden waren.
Wenn Sie Pools für verschiedene Benutzerkonten wie ich verwendet haben, bei denen jedes Benutzerkonto über seine FPM-Prozesse und Sockets verfügt, funktioniert das Festlegen nur der Standardkonfigurationsoptionen listen.owner und listen.group auf 'nginx' einfach nicht. Und natürlich ist es nicht akzeptabel, "nginx" alle besitzen zu lassen.
Stellen Sie für each pool sicher, dass dies der Fall ist
listen.group = nginx
Andernfalls können Sie das Eigentum des Pools und dergleichen alleine lassen.
Der folgende einfache Fix hat für mich funktioniert und mögliche Berechtigungsprobleme mit dem Socket umgangen.
Setzen Sie in Ihrer Nginx-Konfiguration fastcgi_pass auf:
fastcgi_pass 127.0.0.1:9000;
Anstatt
fastcgi_pass /var/run/php5-fpm.sock;
Dieser Parameter muss mit dem Parameter listen = in /etc/php5/fpm/pool.d/www.conf übereinstimmen.
listen = 127.0.0.1:9000;
Starten Sie dann php5-fpm und nginx neu
service php5-fpm restart
Und
service nginx restart
Weitere Informationen finden Sie unter: https://wildlyinaccurate.com/solving-502-bad-gateway-with-nginx-php-fpm/
Das Problem in meinem Fall war, dass der Nginx-Webserver als Benutzer nginx und der Pool als Benutzer www-data ausgeführt wurde.
Ich habe das Problem gelöst, indem ich den Benutzer geändert habe, auf dem Nginx in der /etc/nginx/nginx.conf
-Datei ausgeführt wird.
Änderung: user nginx;
an: user www-data;
starten Sie dann Nginx erneut: service nginx restart
Einfach aber funktioniert ..
listen.owner = nginx
listen.group = nginx
chown nginx:nginx /var/run/php-fpm/php-fpm.sock
Ich habe dasselbe Problem auf Amazon Linux AMI 2016.09 (Centos 7) behoben, indem ich die folgenden Schritte ausführte.
Öffnen Sie Ihre www.conf -Dateien (Beispiel: Sudo nano /etc/php-fpm.d/www.conf) Suchen Sie zuletzt die Zeilen, die die listen.owner- und listen.group festlegen, und ändern Sie deren Werte von "niemand" bis "nginx":
listen.owner = nginx
listen.group = nginx
listen.mode = 0666
Suchen Sie zuletzt die Zeilen, in denen der Benutzer und die Gruppe festgelegt sind, und ändern Sie deren Werte von "Apache" in "nginx":
user = nginx
group = nginx
Php-fpm neu starten (Neustart des Sudo-Dienstes php-fpm)
Überprüfen Sie auch SELINUX (/ etc/selinux):
# getenforce
schalte es aus:
# setenforce 0
Nach dem Upgrade von Ubuntu 14.04 lts auf Ubuntu 16.04 lts fand ich einen weiteren Grund für diesen Fehler, den ich noch nicht gesehen habe.
Während des Aktualisierungsvorgangs hatte ich irgendwie meine ausführbare php5-fpm-Datei verloren. Alle Konfigurationsdateien waren intakt und ich brauchte eine Weile, um zu erkennen, dass service php5-fpm start
einen Prozess nicht wirklich gestartet hat, da keine Fehler angezeigt wurden.
Mein Moment des Erwachens war, als ich bemerkte, dass es keine Socket-Datei in /var/run/php5-fpm.sock
gab, wie es sein sollte, noch zeigte netstat -an
Prozesse, die den Port abhörten, den ich als Alternative versucht habe, um dieses Problem zu lösen. Da die Datei/usr/sbin/php5-fpm ebenfalls nicht vorhanden war, war ich endlich auf dem richtigen Weg.
Um dieses Problem zu lösen, habe ich PHP von Version 5.5 auf 7.0 aktualisiert.apt-get install php-fpm
hat den Trick als Nebeneffekt gemacht. Danach und die Installation anderer notwendiger Pakete war alles wieder normal.
Diese Upgrade-Lösung kann jedoch eigene Probleme haben. Da sich php ziemlich weiterentwickelt hat, ist es möglich, dass die Software auf unvorstellbare Weise bricht. Auch wenn ich diesen Weg eingeschlagen habe, möchten Sie vielleicht die Version, die Sie mögen, noch eine Weile behalten.
Glücklicherweise gibt es es scheint einen ordentlichen Weg zu geben , wie auf der Seite zum Anpassen von Windows beschrieben:
add-apt-repository ppa:ondrej/php
apt-get purge php5-common
apt-get update
apt-get install php5.6
Netter Lösung, wie es sein könnte, ich habe das nicht versucht. Ich gehe davon aus, dass die nächsten Tage mir sagen werden, ob ich das tun sollte.
Siehe einfach /etc/php5/php-fpm.conf pid = /var/run/php5-fpm.pid
IS PID-Datei
In der Datei /etc/php5/fpm/pool.d/www.conf
listen = /var/run/php5-fpm.sock
IS SOCKET-Datei
wenn du pid gleich hörst (pid = /var/run/php5-fpm.sock and listen = /var/run/php5-fpm.sock
) -> falsche Einstellungen und beende sett /etc/php5/fpm/pool.d/www.conf
user = nginx
group = nginx
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
Wenn Sie für jeden Benutzer einen anderen Pool verwenden, stellen Sie sicher, dass Benutzer und Gruppe in der Konfigurationsdatei richtig eingestellt sind. Sie finden den nginx-Benutzer in der Datei /etc/nginx/nginx.conf. Die Nginx-Gruppe ist mit dem Nginx-Benutzer identisch.
user = [pool-user]
group = [pool-group]
listen.owner = [nginx-user]
listen.group = [nginx-group]
Nur um CentOS (und wahrscheinlich Red Hat und Fedora) hinzuzufügen, befindet sich die Datei, in der die Berechtigungen geändert werden sollen:
/etc/php-fpm.d/www.conf
Ich habe das Betriebssystem auf meinem Server einige Male gewechselt, um ein möglichst komfortables System zu erhalten.
Früher funktionierte es meistens sehr gut, aber schließlich bekam ich diesen 502 Gateway-Fehler.
Ich verwende einen PHP-Fpm-Socket für jedes Konto, anstatt den gleichen für alle zu behalten. Wenn einer abstürzt, laufen zumindest die anderen Anwendungen weiter.
Ich hatte früher Benutzer- und Gruppen-WWW-Daten. Dies änderte sich jedoch auf meinem Debian 8 mit dem neuesten Nginx 1.8 und PHP5-fpm.
Der Standardbenutzer ist nginx und die Gruppe. Um dies sicher zu stellen, prüfen Sie am besten die Dateien/etc/group und/etc/passwd. Diese können nicht lügen.
Dort habe ich festgestellt, dass ich jetzt nginx in beiden habe und keine www-Daten mehr habe.
Möglicherweise hilft dies einigen Leuten, die immer noch versuchen herauszufinden, warum die Fehlermeldung weiterhin angezeigt wird.
Es hat für mich funktioniert.
An diejenigen, die alles in diesem Thread ausprobiert haben und noch feststecken: Dies hat mein Problem gelöst
Kommentieren Sie die Zeile mit user
mache es www-data
so wird es zu: user www-data;
Speichern Sie es (Root-Zugriff erforderlich)
Starten Sie Nginx neu
In meinem Fall lief php-fpm überhaupt nicht, also musste ich nur den Dienst starten ????
service php7.3-fpm start
#on ubuntu 18.04
Das Wichtigste dabei ist, dass der Benutzer nginx verwendet, dann müssen Sie es auch angeben
in deiner 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;
}
in Ihrer www.conf
listen.owner = www-data
listen.group = www-data
;listen.mode = 0660
in Ihrem Fall ist der Benutzer und die Gruppe "www", also ersetzen Sie es einfach.
Wenn Sie Erklärungen haben
pid = /run/php-fpm.pid
und
listen = /run/php-fpm.pid
in verschiedenen Konfigurationsdateien wird root Eigentümer dieser Datei.