Come appare il messaggio
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:"Cause frequenti
- L'utente dei worker di nginx (
userinnginx.conf) è diverso dalisten.ownerelisten.groupdel pool PHP-FPM. listen.modenel pool è troppo restrittivo e il gruppo non può scrivere sul socket.- Un pool separato per un sito gira con un utente proprio e il socket appartiene solo a quell'utente.
- L'utente nginx non può entrare in una directory superiore del socket.
- Il percorso in
fastcgi_passpunta a un socket di un altro servizio.
Verifica
- Proprietario, gruppo e modo del socket
ls -l /run/php/*.sock - Con quale utente gira nginx?
grep -E '^\s*user' /etc/nginx/nginx.conf - Impostazioni del pool per il socket
grep -rEn '^(listen|listen\.owner|listen\.group|listen\.mode|user|group) *=' /etc/php/*/fpm/pool.d/ - Si può entrare in ogni directory del percorso?
namei -l /run/php/php-fpm.sock
Soluzione
- Nel file del pool sotto
/etc/php/<versione>/fpm/pool.d/impostalisten.owner = www-data,listen.group = www-dataelisten.mode = 0660, coerenti con l'utente nginx. - In alternativa aggiungi l'utente nginx al gruppo proprietario del socket.
- Verifica che
fastcgi_passusi esattamente il percorso del socket di questo pool. - Riavvia il servizio PHP-FPM della tua versione (il nome contiene la versione) e ricontrolla il socket con
ls -l. - Testa nginx:
nginx -t && systemctl reload nginx.
Domande frequenti
Devo mettere il socket a 0666?
No. Così ogni utente locale può parlare con PHP-FPM. Usa proprietario e gruppo corretti con modo 0660.
In cosa differisce da Primary script unknown?
Qui nginx non raggiunge affatto PHP-FPM. Con Primary script unknown la connessione funziona ma PHP non trova il file dello script.