it-swarm.com.de

nginx-Fehler Verbindung zu php5-fpm.sock fehlgeschlagen (13: Berechtigung verweigert)

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;
        }
260
peter

Ich hatte einen ähnlichen Fehler nach dem PHP-Update. PHP behebt einen Sicherheitsfehler wobei orw für die Socket-Datei berechtigt war.

  1. Öffnen Sie /etc/php5/fpm/pool.d/www.conf oder /etc/php/7.0/fpm/pool.d/www.conf, je nach Ihrer Version. 
  2. Kommentieren Sie alle Berechtigungszeilen wie:

    listen.owner = www-data
    listen.group = www-data
    listen.mode = 0660
    
  3. 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

583
Xander

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.

100
artooro

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.

45
Eric C

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.

37
aMMT

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

23
CRHenkie

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.

22

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
11
JellicleCat

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;
}

Aktualisieren

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;
6
LiveWireBT

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.

6
Ted Phillips

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/

4
supershnee

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

4
EarthMind

Einfach aber funktioniert ..

listen.owner = nginx
listen.group = nginx

chown nginx:nginx /var/run/php-fpm/php-fpm.sock
3
Terry Lin

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)

3
Nanhe Kumar

Überprüfen Sie auch SELINUX (/ etc/selinux):

# getenforce

schalte es aus:

# setenforce 0
1
alchemist

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.

1
sankari

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
1
Bogdik

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]
0
Jaman

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

0
Adrian Stride

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.

0
Marc Quattrini

An diejenigen, die alles in diesem Thread ausprobiert haben und noch feststecken: Dies hat mein Problem gelöst

  1. Kommentieren Sie die Zeile mit user

  2. mache es www-data so wird es zu: user www-data;

  3. Speichern Sie es (Root-Zugriff erforderlich)

  4. Starten Sie Nginx neu

0
Davy

In meinem Fall lief php-fpm überhaupt nicht, also musste ich nur den Dienst starten ????

service php7.3-fpm start
#on ubuntu 18.04
0
Tech Nomad

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.

  • nginx und php fpm neu starten
0
Erenss

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.

0
IvanTheFirst