webentwicklung-frage-antwort-db.com.de

Nginx und uWSGI: Verbindung abgelehnt und 502 Bad Gateway-Fehler

Nginx und uWSGI unter Ubuntu einrichten 13.10.

Wenn ich versuche, auf die Website zuzugreifen, bekomme ich nur "502 Bad Gateway".

Lass apt-get install nginx uwsgi uwsgi-plugin-python3 laufen, um nginx/uwsgi zu installieren.

/etc/nginx/sites-enabled/webpage.com:

server {
        listen          80;
        server_name     webpage.com;
        access_log /var/log/nginx/webpage.com_access.log;
        error_log /var/log/nginx/webpage.com_error.log;


        location / {
            uwsgi_pass      /var/run/webpage.com.uwsgi.socket;
            include         uwsgi_params;
            uwsgi_param     Host $Host;
            uwsgi_param     X-Real-IP $remote_addr;
            uwsgi_param     UWSGI_SCHEME $scheme;
            uwsgi_param     SERVER_SOFTWARE nginx/$nginx_version;     
        }
}

/etc/uwsgi/apps-enabled/webpage.com

[uwsgi]
vhost = true
plugin = python3
socket = /tmp/webpage.com.sock
master = true
enable-threads = true
processes = 2
home = /var/www/webpage.com/env
wsgi-file = /var/www/webpage.com/env/hello.py
virtualenv = /var/www/webpage.com/env
chdir = /var/www/webpage.com/env
touch-reload = /var/www/webpage.com/reload

/var/log/nginx/webpage.com_error.log

2014/01/17 16:28:58 [error] 25073#0: *13 connect() to unix:///var/run/webpage.com.uwsgi.socket failed (111: Connection refused) while connecting to upstream, client: 83.109.132.224, server: webpage.com, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:///var/run/webpage.com.uwsgi.socket:", Host: "webpage.com"

hello.py ist nur eine einfache Hallo-Welt-App.

Habe seit mehreren Stunden damit zu kämpfen ... Jetzt brauche ich Hilfe :) 

9
user1608728

Betrachten Sie die hier veröffentlichten Konfigurationsdateien, verweisen Sie auf den Socket in nginx als:

uwsgi_pass      /var/run/webpage.com.uwsgi.socket;

und in uwsgi as

socket = /tmp/webpage.com.sock
7
Paolo Casciello

Mir ist klar, dass dies nichts mit dem Problem des OP zu tun hat, aber da dies der Top-Treffer für diese Fehlermeldung in Google ist, möchte ich anmerken, was das Problem für mich behoben hat.

Ich folgte einem Tutorial, in dem empfohlen wurde, uwsgi_pass 127.0.0.1:9090; in die nginx-Konfiguration für ein Python-Skript aufzunehmen, das in der uwsgi-Konfiguration mit http-socket = :9090 eingerichtet wurde. Das Fehlerprotokoll /var/log/nginx/error.log zeigte das Problem: 2015/08/13 02:16:04 [error] 12566#12566: *2 upstream prematurely closed connection while reading response header from upstream, client: ::1, server: ~^(www\.)?(.+)$, request: "GET /hello/ HTTP/1.1", upstream: "uwsgi://127.0.0.1:9090", Host: "kybyz" der Browser gab mir den 502 Bad Gateway-Fehler.

es gab (zumindest) zwei Möglichkeiten, das Problem zu beheben. Die erste bestand darin, http-socket in der uwsgi-Konfiguration einfach in socket zu ändern (da, wie sich herausstellte, das tutorial empfohlen wurde; ich hatte es einfach nicht sorgfältig genug gelesen). Dies erlaubt mir jedoch nicht mehr, das Skript direkt zu testen, indem ich mit meinem Browser auf http://127.0.0.1:9090/ verweise, da das Skript jetzt uwsgi-Protokoll anstelle von http sprach. Also änderte ich wieder http-socket und änderte in der nginx-Konfiguration die uwsgi_pass-Zeile in proxy_pass http://127.0.0.1:9090;.

1
jcomeau_ictx

Dies beantwortet die ursprüngliche Frage des OP nicht, aber ich hatte den gleichen Fehler in nginx, connect() to unix:///tmp/uwsgi_dev.sock failed (13: Permission denied) while connecting to upstream, und ich konnte es beheben, indem ich einfach den uwsgi-Prozess vollständig neu startete. Es handelt sich um einen Produktionsserver, daher zögerte ich nicht, einen harten Neustart durchzuführen, aber das erneute Laden des uwsgi-Prozesses hat diesen Trick nicht gebracht. Hoffe das hilft jemandem. 

1
jstaab

Normalerweise handelt es sich hierbei um ein Dateiberechtigungsproblem, d. H. Die uwsgi-Socket-Datei kann vom nginx-Prozess nicht gelesen werden. Überprüfen Sie die Berechtigung der Socket-Datei, den übergeordneten Ordner und den Großelternordner usw. Sie können dies mit einem Befehl tun (vorausgesetzt, Ihr Nginx-Prozess wird vom Benutzer nginx ausgeführt):

su nginx -c "[[ -r sockfile ]] && echo ok"
0
Cyker

Für meine Python-Django-App bei AWS ist sie einfach überlastet. 

Zuerst fügte ich weitere Server hinzu und bemerkte, dass C-Instanzen (Compute) besser sind als M-Instanzen, da die M-Instanzen 66% der CPU-Last als "steal" (von einigen anderen Kunden verwendet) ausgeführt haben, nachdem die CPU leer war Kredite 

Nachdem ich die App jedoch einige Zeit ausgeführt hatte (und nachdem die Anzahl eingehender Anforderungen in kurzer Zeit um das Fünffache gestiegen war), habe ich auch die Datenbankleistung (RDS) überprüft, und sie lief bei 100%. Ich habe auch die Größe der Datenbankinstanz von 4 auf 8 CPU erhöht und funktioniert nun wieder fehlerfrei.

0
PHZ.fi-Pharazon