Hoe "Stat() Failed (13: Permission Denied)" Fout In Nginx Oplossen?

Gepubliceerd 20 juli 2024

Probleem: Nginx Permission Denied Fout

De "Stat() Failed (13: Permission Denied)" fout in Nginx treedt op wanneer de webserver niet de juiste rechten heeft om toegang te krijgen tot bestanden of mappen. Dit probleem kan voorkomen dat Nginx content levert of scripts uitvoert, wat kan leiden tot downtime van de website of problemen met hoe de site werkt.

De Permission Denied Fout Oplossen

Eigendom van bestanden en mappen aanpassen

Om de Permission Denied fout te verhelpen, pas het eigendom van bestanden en mappen aan. Gebruik het chown commando om de eigenaar van de bestanden en mappen te wijzigen naar de Nginx gebruiker, meestal www-data. Bijvoorbeeld:

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

Om eigendomswijzigingen toe te passen op alle bestanden en submappen, voeg de -R optie toe:

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

Tip: Verifieer eigendomswijzigingen

Controleer na het wijzigen van het eigendom met het 'ls -l' commando of de wijzigingen correct zijn toegepast:

ls -l /username/test/static

Dit toont de bestand- en maptoegangsrechten, eigenaar en groepsinformatie.

Maptoegangsrechten wijzigen

Wijzig de maptoegangsrechten met het chmod commando. Stel de juiste waarden in om Nginx toegang te geven tot de bestanden. Een veelgebruikte rechteninstelling is 755, wat lees-, schrijf- en uitvoerrechten geeft aan de eigenaar, en lees- en uitvoerrechten aan anderen:

sudo chmod 755 /username/test/static

Stel de juiste toegang in langs het hele mappad. Elke bovenliggende map moet tenminste uitvoerrechten hebben voor de Nginx gebruiker:

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

Nginx gebruiker toevoegen aan de vereiste groep

Als het wijzigen van eigendom en rechten niet werkt, voeg de Nginx gebruiker toe aan de benodigde groep. Gebruik het gpasswd commando om de www-data gebruiker toe te voegen aan de groep die eigenaar is van de map:

sudo gpasswd -a www-data username

Nadat je de Nginx gebruiker aan de groep hebt toegevoegd, werk de groepsrechten bij voor maptoegang:

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

Dit geeft de groep uitvoerrechten op elke map in het pad, waardoor Nginx toegang krijgt tot de bestanden.

De Oplossing Testen en Verifiëren

Nginx uitvoeren als de juiste gebruiker

Om te testen of Nginx toegang heeft tot de bestanden met de nieuwe rechten, voer een commando uit als de Nginx gebruiker. Gebruik sudo om te wisselen naar de www-data gebruiker en probeer toegang te krijgen tot de bestanden:

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

Als dit commando zonder fouten wordt uitgevoerd, kan Nginx nu toegang krijgen tot de bestanden. Als je een "Permission denied" fout ziet, controleer dan de vorige stappen en zorg ervoor dat alle rechten correct zijn ingesteld.

Tip: Controleer Bestandseigendom

Om snel te controleren of het bestandseigendom correct is ingesteld, gebruik het ls -l commando:

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

Dit toont de eigenaar en groep van het bestand. Zorg ervoor dat ze overeenkomen met de Nginx gebruiker (meestal www-data).

Nginx configuratie herladen

Herlaad na het wijzigen van rechten of eigendom de Nginx configuratie om de wijzigingen toe te passen:

sudo systemctl reload nginx

Dit commando herstart de Nginx service zonder actieve verbindingen te onderbreken.

Om te controleren of de fout is opgelost, bekijk de Nginx foutenlogboeken:

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

Als je de "Permission denied" fouten niet meer in het logboek ziet, is het probleem opgelost. Je Nginx server zou nu de statische bestanden uit de opgegeven map moeten leveren.