Comment résoudre l'erreur "Stat() Failed (13: Permission Denied)" dans Nginx ?

Publié 13 octobre 2024

Problème : Erreur de permission refusée dans Nginx

L'erreur "Stat() Failed (13: Permission Denied)" dans Nginx se produit lorsque le serveur web n'a pas les bonnes permissions pour accéder aux fichiers ou répertoires. Ce problème peut empêcher Nginx de servir du contenu ou d'exécuter des scripts, ce qui peut entraîner une indisponibilité du site web ou des problèmes de fonctionnement.

Résolution de l'erreur de permission refusée

Ajustement de la propriété des fichiers et répertoires

Pour corriger l'erreur de permission refusée, ajustez la propriété des fichiers et répertoires. Utilisez la commande chown pour changer le propriétaire des fichiers et répertoires à l'utilisateur Nginx, généralement www-data. Par exemple :

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

Pour appliquer les changements de propriété à tous les fichiers et sous-répertoires, ajoutez l'option -R :

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

Conseil: Vérifier les changements de propriété

Après avoir modifié la propriété, utilisez la commande 'ls -l' pour vérifier si les changements ont été appliqués correctement :

ls -l /username/test/static

Cela affichera les permissions des fichiers et répertoires, ainsi que les informations sur le propriétaire et le groupe.

Modification des permissions des répertoires

Modifiez les permissions des répertoires en utilisant la commande chmod. Définissez les bonnes valeurs pour permettre à Nginx d'accéder aux fichiers. Un paramètre de permission courant est 755, qui donne les permissions de lecture, écriture et exécution au propriétaire, et les permissions de lecture et d'exécution aux autres :

sudo chmod 755 /username/test/static

Définissez les bonnes permissions tout au long du chemin du répertoire. Chaque répertoire parent doit avoir au moins la permission d'exécution pour l'utilisateur Nginx :

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

Ajout de l'utilisateur Nginx au groupe requis

Si la modification de la propriété et des permissions ne fonctionne pas, ajoutez l'utilisateur Nginx au groupe nécessaire. Utilisez la commande gpasswd pour ajouter l'utilisateur www-data au groupe propriétaire du répertoire :

sudo gpasswd -a www-data username

Après avoir ajouté l'utilisateur Nginx au groupe, mettez à jour les permissions de groupe pour l'accès au répertoire :

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

Cela donne au groupe la permission d'exécution sur chaque répertoire du chemin, permettant à Nginx d'accéder aux fichiers.

Test et vérification de la solution

Exécution de Nginx en tant qu'utilisateur approprié

Pour tester si Nginx peut accéder aux fichiers avec les nouvelles permissions, exécutez une commande en tant qu'utilisateur Nginx. Utilisez sudo pour passer à l'utilisateur www-data et essayez d'accéder aux fichiers :

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

Si cette commande s'exécute sans erreur, Nginx peut maintenant accéder aux fichiers. Si vous voyez une erreur "Permission denied", revoyez les étapes précédentes et assurez-vous que toutes les permissions sont correctement définies.

Conseil: Vérifier la propriété des fichiers

Pour vérifier rapidement si la propriété des fichiers est correctement définie, utilisez la commande ls -l :

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

Cela affichera le propriétaire et le groupe du fichier. Assurez-vous qu'ils correspondent à l'utilisateur Nginx (généralement www-data).

Rechargement de la configuration Nginx

Après avoir modifié les permissions ou la propriété, rechargez la configuration Nginx pour appliquer les changements :

sudo systemctl reload nginx

Cette commande redémarre le service Nginx sans interrompre les connexions actives.

Pour vérifier si l'erreur est résolue, consultez les logs d'erreur Nginx :

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

Si vous ne voyez plus les erreurs "Permission denied" dans le log, le problème est résolu. Votre serveur Nginx devrait maintenant servir les fichiers statiques depuis le répertoire spécifié.