Come risolvere l'errore "Stat() Failed (13: Permission Denied)" in Nginx?

Pubblicato 13 ottobre 2024

Problema: Errore di Permesso Negato in Nginx

L'errore "Stat() Failed (13: Permission Denied)" in Nginx si verifica quando il server web non ha i permessi corretti per accedere a file o directory. Questo problema può impedire a Nginx di servire contenuti o eseguire script, causando tempi di inattività del sito web o problemi di funzionamento.

Risoluzione dell'Errore di Permesso Negato

Regolazione della proprietà di file e directory

Per risolvere l'errore di Permesso Negato, regola la proprietà di file e directory. Usa il comando chown per cambiare il proprietario dei file e delle directory all'utente Nginx, solitamente www-data. Ad esempio:

sudo chown www-data:www-data /username/test/static

Per applicare le modifiche di proprietà a tutti i file e sottodirectory, aggiungi l'opzione -R:

sudo chown -R www-data:www-data /username/test/static

Suggerimento: Verifica delle modifiche di proprietà

Dopo aver cambiato la proprietà, usa il comando 'ls -l' per controllare se le modifiche sono state applicate correttamente:

ls -l /username/test/static

Questo mostrerà i permessi del file e della directory, il proprietario e le informazioni sul gruppo.

Modifica dei permessi delle directory

Modifica i permessi della directory usando il comando chmod. Imposta i valori corretti per consentire a Nginx di accedere ai file. Un'impostazione comune dei permessi è 755, che dà permessi di lettura, scrittura ed esecuzione al proprietario, e permessi di lettura ed esecuzione agli altri:

sudo chmod 755 /username/test/static

Imposta l'accesso corretto lungo l'intero percorso della directory. Ogni directory padre dovrebbe avere almeno il permesso di esecuzione per l'utente Nginx:

sudo chmod 755 /username
sudo chmod 755 /username/test

Aggiunta dell'utente Nginx al gruppo richiesto

Se la modifica della proprietà e dei permessi non funziona, aggiungi l'utente Nginx al gruppo necessario. Usa il comando gpasswd per aggiungere l'utente www-data al gruppo che possiede la directory:

sudo gpasswd -a www-data username

Dopo aver aggiunto l'utente Nginx al gruppo, aggiorna i permessi del gruppo per l'accesso alla directory:

sudo chmod g+x /username
sudo chmod g+x /username/test
sudo chmod g+x /username/test/static

Questo dà al gruppo il permesso di esecuzione su ogni directory nel percorso, permettendo a Nginx di accedere ai file.

Test e Verifica della Soluzione

Esecuzione di Nginx come utente appropriato

Per testare se Nginx può accedere ai file con i nuovi permessi, esegui un comando come utente Nginx. Usa sudo per passare all'utente www-data e prova ad accedere ai file:

sudo -u www-data stat /username/test/static/index.html

Se questo comando viene eseguito senza errori, Nginx può ora accedere ai file. Se vedi un errore "Permission denied", rivedi i passaggi precedenti e assicurati che tutti i permessi siano impostati correttamente.

Suggerimento: Controlla la Proprietà del File

Per controllare rapidamente se la proprietà del file è impostata correttamente, usa il comando ls -l:

ls -l /username/test/static/index.html

Questo mostrerà il proprietario e il gruppo del file. Assicurati che corrispondano all'utente Nginx (solitamente www-data).

Ricaricamento della configurazione di Nginx

Dopo aver modificato i permessi o la proprietà, ricarica la configurazione di Nginx per applicare le modifiche:

sudo systemctl reload nginx

Questo comando riavvia il servizio Nginx senza interrompere le connessioni attive.

Per verificare se l'errore è stato risolto, controlla i log di errore di Nginx:

sudo tail -f /var/log/nginx/error.log

Se non vedi più gli errori "Permission denied" nel log, il problema è risolto. Il tuo server Nginx dovrebbe ora servire i file statici dalla directory specificata.