Wie man den Nginx-Fehler '(13: Permission denied) while connecting to upstream' behebt

Veröffentlicht 27. August 2024

Problem: Nginx '(13: Permission denied)' Fehler

Bei der Verwendung von Nginx als Webserver oder Reverse-Proxy kann die Fehlermeldung "(13: Permission denied) while connecting to upstream" auftreten. Dieser Fehler tritt häufig auf, wenn Nginx keine Berechtigungen hat, auf den Upstream-Server zuzugreifen oder mit ihm zu kommunizieren. Dies kann die Funktion Ihrer Website beeinträchtigen und verhindern, dass Inhalte die Benutzer erreichen.

6 Lösungen zur Behebung des Nginx Permission Denied Problems

1. Überprüfen der Nginx-Benutzerberechtigungen

Um den Nginx Permission Denied Fehler zu beheben, überprüfen Sie die Nginx-Benutzerberechtigungen. Schauen Sie in die Nginx.conf-Datei, um die Benutzer- und Gruppeneinstellungen zu sehen. Stellen Sie sicher, dass der Nginx-Benutzer auf die Dateien und Verzeichnisse zugreifen kann. Möglicherweise müssen Sie die Datei- und Verzeichnisberechtigungen mit dem chmod-Befehl ändern.

2. SELinux-Einstellungen prüfen

SELinux kann Nginx daran hindern, auf Dateien zuzugreifen oder Netzwerkverbindungen herzustellen. Überprüfen Sie den SELinux-Status und ändern Sie gegebenenfalls die Boolean-Werte. Verwenden Sie den Befehl 'setsebool', um diese Einstellungen zu ändern. Sie können den SELinux-Boolean-Wert für httpd network connect wie folgt umschalten:

setsebool httpd_can_network_connect on -p

3. Nginx-Konfigurationsdateien überprüfen

Prüfen Sie Ihre Nginx.conf-Datei auf Fehler. Achten Sie auf die Einstellungen des Upstream-Servers. Stellen Sie sicher, dass alle Pfade und Serveradressen korrekt sind und dass Nginx auf diese Ressourcen zugreifen kann.

4. Nginx-Fehlerprotokolle analysieren

Nginx-Fehlerprotokolle können Ihnen helfen, das Permission Denied Problem zu finden. Schauen Sie in die Fehlerprotokolle, normalerweise in /var/log/nginx/error.log, nach Permission Denied Meldungen. Verwenden Sie den grep-Befehl, um diese Fehler zu finden:

grep denied /var/log/nginx/error.log

5. Firewall-Regeln untersuchen

Ihre Firewall könnte Nginx-Verbindungen blockieren. Überprüfen Sie Ihre Firewall-Regeln und stellen Sie sicher, dass sie Nginx erlauben, sich mit den benötigten Ports und IP-Adressen zu verbinden. Möglicherweise müssen Sie neue Regeln hinzufügen oder bestehende ändern, um Nginx den richtigen Zugriff zu gewähren.

6. Verfügbarkeit des Upstream-Servers überprüfen

Stellen Sie sicher, dass Ihre Upstream-Server laufen und erreichbar sind. Versuchen Sie, von Ihrem Nginx-Server aus eine Verbindung zu diesen Servern herzustellen, um Netzwerk- oder Konfigurationsprobleme auszuschließen. Sie können telnet oder curl verwenden, um diese Verbindungen zu testen und sicherzustellen, dass die Upstream-Server antworten.

Wenn Sie immer noch Probleme haben, sehen Sie möglicherweise einen 502 Bad Gateway Fehler bei der Verbindung zum Upstream. Überprüfen Sie in diesem Fall Ihren Anwendungsserver und stellen Sie sicher, dass er läuft und korrekt konfiguriert ist.

Denken Sie daran, dass Sie nach Änderungen der SELinux-Einstellungen möglicherweise Folgendes ausführen müssen:

audit2allow -m mynginx
sudo semodule -i mynginx.pp

Dies erstellt und installiert ein benutzerdefiniertes Richtlinienmodul basierend auf den Audit-Logs.

Zusätzliche Schritte zur Fehlerbehebung bei Nginx Permission Denied Fehlern

Verwendung von audit2allow zur Generierung von SELinux-Richtlinien

Das Tool audit2allow hilft bei der Erstellung von SELinux-Richtlinien, wenn Standardrichtlinien nicht funktionieren. So verwenden Sie es:

  1. Überprüfen Sie SELinux-Logs auf verweigerte Aktionen:

    grep "denied" /var/log/audit/audit.log
  2. Verwenden Sie audit2allow, um eine Richtlinie zu generieren:

    audit2allow -m mynginx sudo semodule
  3. Wenden Sie die neue Richtlinie an:

    mynginx sudo semodule -i mynginx.pp

Dieser Prozess erstellt und installiert ein SELinux-Modul basierend auf kürzlich verweigerten Aktionen.

Anpassen von Dateieigentum und Berechtigungen

Korrekte Dateieigentümerschaft und Berechtigungen helfen bei der Lösung von Nginx-Berechtigungsproblemen:

  1. Setzen Sie das Eigentum von Nginx-Dateien und -Verzeichnissen:

    chown -R nginx:nginx /var/www/html
  2. Setzen Sie Berechtigungen:

    chmod 755 /var/www/html
    chmod 644 /var/www/html/*

Diese Befehle geben dem Nginx-Benutzer und der Gruppe das Eigentum an Webdateien und setzen Lese-, Schreib- und Ausführungsberechtigungen. Ändern Sie die Pfade nach Bedarf für Ihre Konfiguration.