wake-up-neo.net

nginx und php-fpm socket besitzer

Nach einem Update meines Systems bin ich auf einen fehlerhaften Gateway-Fehler meiner PHP - Apps gestoßen, die auf Nginx laufen.

1 connect () zu unix: /var/run/php-fcgi-vhostname-php-fcgi-0.sock ist fehlgeschlagen (13: Berechtigung abgelehnt), während die Verbindung zum Upstream hergestellt wurde, client: xx.xxx.xx.xx, Server: localhost , Anforderung: "GET/HTTP/1.1", Upstream: "fastcgi: // unix: /var/run/php-fcgi-vhostname-php-fcgi-0.sock:", Host: "xx.xx.xx. xx "

Das Problem wird durch fehlerhafte Berechtigungen der verwendeten php-fpm-Sockets verursacht. In der Tat sehe ich /var/run/php-fcgi.sock im Besitz von root:root, aber nginx und php-fpm verwenden als Benutzer www-data.

Ich habe die php-fpm config unter /etc/php-fpm.d/www.conf bereits bearbeitet mit:

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

aber es löst das Problem nicht und wenn ich nginx und php-fpm neu starte, werden die Sockets mit root:root als Benutzer/Gruppe erstellt.

Der einzige Weg, den ich zur Behebung gefunden habe, besteht darin, den Besitzer der Sockets in www-data zu ändern: www-data manuell. Dies ist jedoch keine echte Lösung, denn jedes Mal, wenn ich meine Dienste neu starte, muss ich sie erneut anwenden.

Wie kann ich dieses Problem beheben? Ich bin bei CentOS 6.5

Bearbeiten:

Ich verwende Ajenti-V, um meine vhosts und mein PHP-FPM zu konfigurieren. Es erstellt für jede Website/jeden vhost einen neuen Socket, und diese werden in /etc/php-fpm.conf festgelegt.

Sie haben diese Struktur:

[vhostname-php-fcgi-0]
user = www-data
group = www-data

listen = /var/run/php-fcgi-vhostname-php-fcgi-0.sock

pm = dynamic
pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 5

Wenn ich zu jedem Eintrag diese Zeichenketten hinzufüge:

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

Alles funktioniert richtig.

So wie es aussieht, ist die www.conf nicht enthalten (vielleicht?). Das ist meine php-fpm.conf:

[global]
pid = /var/run/php-fpm/php-fpm.pid
error_log = /var/log/php5-fpm.log


[global-pool]
user = www-data
group = www-data
listen = /var/run/php-fcgi.sock

pm = dynamic
pm.start_servers = 1
pm.max_children = 5
pm.min_spare_servers = 1
pm.max_spare_servers = 5


[vhostname-php-fcgi-0]
user = www-data
group = www-data

listen = /var/run/php-fcgi-vhostname-php-fcgi-0.sock

pm = dynamic
pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 5
13
Fez Vrasta

Konfigurationsdateien, die FPM liest

/etc/php-fpm.conf Ist die Konfigurationsdatei, die FPM liest (unter CentOS). Wenn FPM auch andere Konfigurationsdateien lesen soll, müssen Sie dies mitteilen.

Sie können dies tun, indem Sie die Zeile include=/etc/php-fpm.d/*.conf Am Ende von /etc/php-fpm.conf Einfügen. Es liest dann alles im Verzeichnis /etc/php-fpm.d (Das mit .conf Endet).

Fügen Sie dann die globalen Direktiven und die Include-Zeile in /etc/php-fpm.conf Ein. Das könnte ungefähr so ​​aussehen:

[global]

pid = /var/run/php-fpm/php-fpm.pid
error_log = /var/log/php5-fpm.log

include=/etc/php-fpm.d/*.conf

Und haben Sie eine separate Datei in /etc/php-fpm.d Für jeden Pool.

Beispiel /etc/php-fpm.d/global.conf:

[global-pool]

user = www-data
group = www-data

listen = /var/run/php-fcgi.sock

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

pm = dynamic
pm.start_servers = 1
pm.max_children = 5
pm.min_spare_servers = 1
pm.max_spare_servers = 5

Beispiel /etc/php-fpm.d/vhostname-0.conf:

[vhostname-php-fcgi-0]

user = www-data
group = www-data

listen = /var/run/php-fcgi-vhostname-php-fcgi-0.sock

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

pm = dynamic
pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 5

Richtlinien, auf die zu achten ist

  • Jeder Pool sollte eine andere Steckdose verwenden. Wenn Sie über mehrere Pools verfügen, die denselben Socket verwenden, treten Probleme auf.

  • Die Direktiven user und group steuern den Benutzer/die Gruppe, als die der FPM-Prozess für diesen Pool ausgeführt wird. Diese geben nicht den Benutzer/die Gruppe des Sockets an.

  • Die Direktiven listen.owner Und listen.group Steuern den Benutzer/die Gruppe, die der Socket für diesen Pool verwendet.

  • Die Pool-Direktiven (wie listen.*) Funktionieren nur für Pools. Sie können also nicht im globalen Bereich verwenden, Sie müssen spezifizieren sie für jeden Pool.

Socket-Berechtigungen

Die Berechtigungen 0660 sind vollkommen in Ordnung, wenn listen.owner Und listen.group Mit dem Webserver identisch sind. Sie könnten sogar 0600 verwenden, aber man könnte argumentieren, dass jeder Benutzer, der unter der gleichen Gruppe wie der Webserver arbeiten kann, auch den Socket verwenden kann, also würde ich 0660 verwenden.

26

NGINX wird als Benutzer nginx und php5-fpm als Benutzer www-data ausgeführt. Fügen Sie einfach nginx zur Gruppe www-data hinzu, und das Problem ist gelöst, und nginx kann auf /var/run/php5-fpm.sock zugreifen. Funktioniert hervorragend mit Ubuntu 14.04, Nginx 1.7.10, PHP 5.5.9-1ubuntu4.6 (fpm-fcgi):

$ Sudo usermod -aG www-data nginx
5
AnthumChris

alle! Das ist auch mein Thema . Ich habe gerade meinen Fpm-Benutzer in vagrant geändert, meine Pools neu gestartet und ... es ist fertig! Hier kommt mein conf:

user = vagrant
group = nginx

listen.owner = vagrant
listen.group = nginx
listen.mode = 0660

Ich hoffe es kann jemandem helfen.

1
jordan

Hallo zusammen und vielen Dank für die Hilfe, in meinem Fall mit Ubuntu Server 14.04 nginx und php5-fpm wurde das Problem mit dem php-fpm Socket-Besitzer von root durch Bearbeiten der Datei /etc/php5/fpm/pool.d/www.conf gelöst Kommentieren Sie die Zeilen:

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

Aus einer übersichtlichen Installation ist nginx Besitzer und Gruppe www-data . Ich denke, dass es die beste Vorgehensweise ist, /etc/nginx/nginx.conf zu suchen und zu überprüfen, dass in der ersten Zeile Folgendes steht:

user www-data;

Und verwenden Sie den Standardbenutzer Chears!

0
Dimitrios

Tu es einfach noch etwas

Meine Konfiguration Vagrant/Ubuntu 16/Nginx 1.13/PHP-FPM 7.1

Sudo vi /etc/nginx/nginx.conf

Ändern Sie die erste Zeile des Benutzers nginx => user www-data

service nginx restart
0
Tidytrax

Bei meiner Installation, Centos 7.5, Apache mit PHP 7.1 und PHP 5.6, hatte ich das gleiche Problem, dass ich nach jedem Neustart die Berechtigungen für die Datei php56-php.fpm.sock (Besitz von root) manuell festlegen musste.

Meine Konfiguration für php56 war hier und kann bei Ihrer Installation anders aussehen: /opt/remi/php56/root/etc/php-fpm.d/www.conf

Ich habe diesen kommentierten Abschnitt in der Datei geändert:

listen.owner = nginx
listen.group = nginx
listen.mode = 0666

Nach dem Neustart ist jetzt alles richtig mit den richtigen Berechtigungen für die Socket-Datei. Nicht sicher über den Listenmodus. Ich denke, 0660 funktioniert auch. 

0
Asle

Fügen Sie hier nur hinzu, dass die Direktive listen.acl_users Kommentiert werden sollte, da sie andernfalls die Werte listen.owner Und listen.group Überschreibt:

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

; When POSIX Access Control Lists are supported you can set them using
; these options, value is a comma separated list of user/group names.
; When set, listen.owner and listen.group are ignored
;listen.acl_users = Apache,nginx
0
jpcaparas