So sieht die Meldung aus
2026/10/29 10:03:17 [crit] 1234#1234: *321 connect() to unix:/run/php/php8.3-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 203.0.113.5, server: example.com, request: "GET /index.php HTTP/2.0", upstream: "fastcgi://unix:/run/php/php8.3-fpm.sock:"Häufige Ursachen
- Der Worker-Benutzer von nginx (
userinnginx.conf) weicht vonlisten.ownerundlisten.groupdes PHP-FPM-Pools ab. listen.modeim Pool ist zu streng, die Gruppe kann nicht in den Socket schreiben.- Ein eigener Pool für eine Seite läuft unter einem eigenen Benutzer, und der Socket gehört nur diesem Benutzer.
- Ein übergeordnetes Verzeichnis des Sockets darf der nginx-Benutzer nicht betreten.
- Der Socket-Pfad in
fastcgi_passzeigt auf einen Socket, der einem anderen Dienst gehört.
Prüfen
- Besitzer, Gruppe und Modus des Sockets
ls -l /run/php/*.sock - Unter welchem Benutzer läuft nginx?
grep -E '^\s*user' /etc/nginx/nginx.conf - Pool-Einstellungen für den Socket
grep -rEn '^(listen|listen\.owner|listen\.group|listen\.mode|user|group) *=' /etc/php/*/fpm/pool.d/ - Kann jedes Verzeichnis auf dem Pfad betreten werden?
namei -l /run/php/php-fpm.sock
Lösung
- In der Pool-Datei unter
/etc/php/<Version>/fpm/pool.d/listen.owner = www-data,listen.group = www-dataundlisten.mode = 0660setzen, passend zum nginx-Benutzer. - Alternativ den nginx-Benutzer in die Gruppe aufnehmen, der der Socket gehört.
- Sicherstellen, dass
fastcgi_passgenau den Socket-Pfad dieses Pools nutzt. - Den PHP-FPM-Dienst deiner Version neu starten (sein Name enthält die Version) und den Socket danach mit
ls -lprüfen. - nginx testen:
nginx -t && systemctl reload nginx.
Häufige Fragen
Soll ich den Socket auf 0666 setzen?
Nein. Dann kann jeder lokale Benutzer mit PHP-FPM sprechen. Nimm passenden Besitzer und Gruppe mit Modus 0660.
Wie unterscheidet sich das von Primary script unknown?
Hier erreicht nginx PHP-FPM gar nicht. Bei Primary script unknown klappt die Verbindung, aber PHP findet die Skriptdatei nicht.