Wie behebt man den Fehler "Stat() Failed (13: Permission Denied)" in Nginx?

Veröffentlicht 13. Oktober 2024

Problem: Nginx Permission Denied Fehler

Der "Stat() Failed (13: Permission Denied)" Fehler in Nginx tritt auf, wenn der Webserver nicht die richtigen Berechtigungen hat, um auf Dateien oder Verzeichnisse zuzugreifen. Dieses Problem kann Nginx daran hindern, Inhalte zu servieren oder Skripte auszuführen, was zu Websiteausfällen oder Problemen mit der Funktionalität der Website führen kann.

Lösung des Permission Denied Fehlers

Anpassen der Datei- und Verzeichnisbesitzrechte

Um den Permission Denied Fehler zu beheben, passen Sie die Besitzrechte von Dateien und Verzeichnissen an. Verwenden Sie den chown-Befehl, um den Besitzer der Dateien und Verzeichnisse auf den Nginx-Benutzer zu ändern, normalerweise www-data. Zum Beispiel:

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

Um Besitzrechtsänderungen auf alle Dateien und Unterverzeichnisse anzuwenden, fügen Sie die Option -R hinzu:

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

Tipp: Überprüfen der Besitzrechtsänderungen

Nach der Änderung der Besitzrechte verwenden Sie den 'ls -l' Befehl, um zu überprüfen, ob die Änderungen korrekt angewendet wurden:

ls -l /username/test/static

Dies zeigt die Datei- und Verzeichnisberechtigungen sowie Besitzer- und Gruppeninformationen an.

Ändern der Verzeichnisberechtigungen

Ändern Sie die Verzeichnisberechtigungen mit dem chmod-Befehl. Setzen Sie die korrekten Werte, um Nginx den Zugriff auf die Dateien zu ermöglichen. Eine übliche Berechtigungseinstellung ist 755, die dem Besitzer Lese-, Schreib- und Ausführungsrechte und anderen Lese- und Ausführungsrechte gibt:

sudo chmod 755 /username/test/static

Setzen Sie die richtigen Zugriffsrechte entlang des gesamten Verzeichnispfads. Jedes übergeordnete Verzeichnis sollte mindestens Ausführungsrechte für den Nginx-Benutzer haben:

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

Hinzufügen des Nginx-Benutzers zur erforderlichen Gruppe

Wenn das Ändern der Besitzrechte und Berechtigungen nicht funktioniert, fügen Sie den Nginx-Benutzer zur notwendigen Gruppe hinzu. Verwenden Sie den gpasswd-Befehl, um den www-data-Benutzer zur Gruppe hinzuzufügen, die das Verzeichnis besitzt:

sudo gpasswd -a www-data username

Nachdem Sie den Nginx-Benutzer zur Gruppe hinzugefügt haben, aktualisieren Sie die Gruppenberechtigungen für den Verzeichniszugriff:

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

Dies gibt der Gruppe Ausführungsrechte für jedes Verzeichnis im Pfad und ermöglicht Nginx den Zugriff auf die Dateien.

Testen und Überprüfen der Lösung

Ausführen von Nginx als entsprechender Benutzer

Um zu testen, ob Nginx mit den neuen Berechtigungen auf die Dateien zugreifen kann, führen Sie einen Befehl als Nginx-Benutzer aus. Verwenden Sie sudo, um zum www-data-Benutzer zu wechseln und versuchen Sie, auf die Dateien zuzugreifen:

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

Wenn dieser Befehl ohne Fehler ausgeführt wird, kann Nginx jetzt auf die Dateien zugreifen. Wenn Sie einen "Permission denied" Fehler sehen, überprüfen Sie die vorherigen Schritte und stellen Sie sicher, dass alle Berechtigungen korrekt gesetzt sind.

Tipp: Überprüfen der Dateibesitzrechte

Um schnell zu überprüfen, ob die Dateibesitzrechte korrekt gesetzt sind, verwenden Sie den ls -l Befehl:

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

Dies zeigt den Besitzer und die Gruppe der Datei an. Stellen Sie sicher, dass sie mit dem Nginx-Benutzer (normalerweise www-data) übereinstimmen.

Neuladen der Nginx-Konfiguration

Nach dem Ändern von Berechtigungen oder Besitzrechten laden Sie die Nginx-Konfiguration neu, um die Änderungen anzuwenden:

sudo systemctl reload nginx

Dieser Befehl startet den Nginx-Dienst neu, ohne aktive Verbindungen zu unterbrechen.

Um zu überprüfen, ob der Fehler behoben ist, sehen Sie sich die Nginx-Fehlerprotokolle an:

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

Wenn Sie die "Permission denied" Fehler nicht mehr im Protokoll sehen, ist das Problem gelöst. Ihr Nginx-Server sollte nun die statischen Dateien aus dem angegebenen Verzeichnis servieren können.