409 Stimmen

(13: Berechtigung verweigert) beim Verbinden mit upstream: [nginx]

Ich arbeite daran, ein Django-Projekt mit Nginx und Gunicorn zu konfigurieren.

Beim Zugriff auf meinen Port gunicorn mysite.wsgi:application --bind=127.0.0.1:8001 im Nginx-Server erhalte ich den folgenden Fehler in meiner Fehlerprotokolldatei;

2014/05/30 11:59:42 [crit] 4075#0: *6 connect() zu 127.0.0.1:8001 fehlgeschlagen (13: Keine Berechtigung) beim Verbinden mit dem Upstream, Client: 127.0.0.1, Server: localhost, Anfrage: "GET / HTTP/1.1", Upstream: "http://127.0.0.1:8001/", Host: "localhost:8080"

Unten steht der Inhalt meiner nginx.conf-Datei;

server {
    listen 8080;
    server_name localhost;
    access_log  /var/log/nginx/example.log;
    error_log /var/log/nginx/example.error.log;

    location / {
        proxy_pass http://127.0.0.1:8001;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
    }
}

Auf der HTML-Seite erhalte ich 502 Bad Gateway.

Welchen Fehler mache ich?

2voto

sule Punkte 113

Ich bin auch auf dieses Problem gestoßen. Ich benutze Nginx mit HHVM, die unten stehende Lösung hat mein Problem behoben:

sudo semanage fcontext -a -t httpd_sys_rw_content_t "/etc/nginx/fastcgi_temp(/.*)?"

sudo restorecon -R -v /etc/nginx/fastcgi_temp

0voto

melo Punkte 159

Das SELinux-Richtlinienverwaltungstool hat eine Reihe von Standardports, die erlaubt sind.
Normalerweise gehören 8001, 5000, 4000 usw. nicht dazu.

Schritt 1

Überprüfen Sie, ob der Port, den Sie verwenden möchten, erlaubt ist (oder einem anderen zugewiesen ist)

sudo semanage port --list | grep http_port_t 

Ausgabe

http_port_t  tcp  80, 81, 443, 488, 8008, 8009, 8443, 9000

Sie können auch dessen Verwendung bestätigen (einem anderen zugewiesen)

sudo semanage port --list | grep 8001

Schritt 2

Wenn er nicht verfügbar ist, können Sie ihn entweder hinzufügen oder eine der obigen Optionen verwenden

Option 1

Um den Port hinzuzufügen.

sudo semanage port --add --type http_port_t --proto tcp 8001
Option 2 (Ich empfehle)

Einen der erlaubten Ports zu verwenden (anstatt einen neuen hinzuzufügen)

server {
    ....

    location / {
        proxy_pass http://127.0.0.1:9000;
        ...
    }
}

In unserem Fall haben wir 8001 in 9000 geändert.

Hinweis: Sie sollten auch den Port in Ihrem Projekt auf 9000 ändern
Für diesen Fall lautet der Befehl gunicorn mysite.wsgi:application --bind=127.0.0.1:9000

Sicherheitsimplikation

Ich halte dies für sicherer als die vorherigen Antworten

0voto

Genarito Punkte 2503

In meinem Fall wurde es (aus diesem Blog) durch Ausführen des Befehls behoben: semanage permissive -a httpd_t und Neustarten des NGINX-Dienstes.

0voto

Oth Mane Punkte 16

Ich hatte ein ähnliches Problem, als ich meine Django-Anwendung lokal mit Nginx als Reverse-Proxy bereitgestellt habe. Die Fehlermeldung (13: Berechtigung verweigert) beim Verbinden mit dem Upstream deutet in der Regel auf ein Berechtigungsproblem beim Zugriff auf den Upstream-Server hin, in diesem Fall Ihre Django-App.

Die Lösung, die für mich funktionierte, hing mit der Datei nginx.conf zusammen. In dieser Datei spielt die user-Direktive eine wichtige Rolle, da sie den Benutzer und die Gruppe definiert, unter denen Nginx läuft. Manchmal kann ein vorangehender Kommentar vor der user-Direktive Berechtigungsprobleme verursachen.

Um den Fehler zu beheben, befolgen Sie diese Schritte:

  1. Suchen Sie Ihre nginx.conf Datei (normalerweise in /etc/nginx/).
  2. Finden Sie die user-Direktive. Sie sollte so aussehen: user ;.
  3. Vergewissern Sie sich, dass es keine Kommentare (Zeilen, die mit # beginnen) vor der user-Direktive gibt. Kommentare können manchmal die Konfiguration stören.
  4. Speichern Sie die nginx.conf Datei.
  5. Starten Sie Nginx mit: sudo systemctl restart nginx neu.

Nach Anwendung dieser Schritte sollte der Fehler (13: Berechtigung verweigert) nicht mehr auftreten und Ihre Django-Anwendung sollte ordnungsgemäß funktionieren, wenn sie über den Nginx-Proxy aufgerufen wird.

0voto

Abbas Habibnejad Punkte 415

Ich hatte den gleichen Fehler. Diese Befehle funktionieren für mich

sudo chmod +x /home/(benutzername)/
sudo chmod +x /home/(benutzername)/(dein_projekt_ordner)/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X