Die Puffergröße ist offensichtlich immer noch der Standardwert (4096). Stellen Sie sicher, dass Sie an der richtigen Instanz arbeiten. Sie können auch "-b 32k" schreiben. Stellen Sie außerdem sicher, dass diese Option (Puffergröße) in einigen Konfigurationsdateien noch nicht festgelegt ist.
Zakinster
Es gibt keine Konfigurationsdatei. Funktioniert immer noch nicht :(
Kartik Rokde
8
uwsgi-docs.readthedocs.org/en/latest/ThingsToKnow.html Sie versuchen , zu einer uwsgi Buchse mit dem HTTP - Protokoll, zusätzlich zu diesen Optionen an den Kaiser angegeben verbinden nicht vererbt werden, es ist nur ein Prozess - Manager
Roberto
@ zakinster Aus irgendeinem Grund hat das Wertformat mit kbei mir nicht funktioniert. Musste die volle Nummer angeben. Es können keine Zeiger auf die Formate gefunden werden, die Sie hier verwenden können.
berühmte Garkin
Antworten:
207
Ich bin auch auf dasselbe Problem gestoßen, als ich einem Tutorial gefolgt bin. Das Problem war, dass ich die Option socket = 0.0.0.0:8000anstelle von gesetzt habe http = 0.0.0.0:8000.
socketOption, die für die Verwendung mit httpRoutern von Drittanbietern (z. B. Nginx ) vorgesehen ist. Wenn die Option aktiviert ist, kann uwsgi eingehende HTTP-Anforderungen akzeptieren und selbst weiterleiten.
Ich möchte dies nur kommentieren: uwsgi hat die Optionen "http", "http-socket" und "socket". Ich wollte CGI-Python-Skripte aufrufen. "Socket" war die Antwort.
NuclearPeon
In der Nginx-Konfigurationsdatei möchten wir möglicherweise Folgendes verwenden: include / etc / nginx / uwsgi_params; uwsgi_pass django_upstream;
Mennanov
3
Es ist nicht die richtige Lösung. Was ist, wenn wir Sockets entfernen möchten?
Farsheed
2
@Farsheed, ich habe gerade beschrieben, warum OP diesen Fehler sieht. Wie Sie das Problem beheben können, liegt ganz bei Ihnen. Es kann socket = /tmp/myapp.sockoder http = 0.0.0.0:8000oder was auch immer sein, abhängig von Ihren Bedürfnissen.
Palasaty
1
Obwohl diese Antwort das Problem in einigen Situationen lösen könnte, denke ich, dass die richtige Antwort im allgemeinen Fall die von @Farsheed unten bereitgestellte ist.
Augusto Destrero
142
Die richtige Lösung besteht darin, nicht zum HTTP-Protokoll zu wechseln. Sie müssen nur die Puffergröße in den uWSGI-Einstellungen erhöhen.
buffer-size=32768
oder im Befehlszeilenmodus:
-b 32768
Zitat aus der offiziellen Dokumentation:
Standardmäßig weist uWSGI den Headern jeder Anforderung einen sehr kleinen Puffer (4096 Byte) zu. Wenn Sie in Ihren Protokollen die Meldung "Ungültige Anforderungsblockgröße" erhalten, benötigen Sie möglicherweise einen größeren Puffer. Erhöhen Sie es (bis zu 65535) mit der Option Puffergröße.
Wenn Sie in Ihren Protokollen '21573' als Anforderungsblockgröße erhalten, kann dies bedeuten, dass Sie das HTTP-Protokoll verwenden, um mit einer Instanz zu sprechen, die das uwsgi-Protokoll spricht. Tu das nicht.
Manchmal müssen Sie das http-Protokoll verwenden, da Unix-Sockets nur auf dem lokalen Computer verfügbar sind. Stellen Sie sich eine Situation vor, in der Sie mehrere Maschinen und einen separaten Balancer darüber haben - Sie müssen diese http-sockethier verwenden.
Palasaty
@ Palasaty oder ein IP-Socket und ein uwsgiProtokoll, dann erhalten Sie möglicherweise auch den gleichen Fehler wie OP
Andrei
2
@Palasaty, in jedem Fall wird das Problem behoben, wenn die Puffergröße behoben wird!
Farsheed
Bei der Verwendung von Nginx als Reverse-Proxy musste ich verwenden http-socket. Alles andere ergab "502 Bad Gateway", selbst wenn die Puffergröße erhöht wurde.
Hubro
Zu der zitierten Dokumentation "Wenn Sie in Ihren Protokollen '21573' als Anforderungsblockgröße erhalten, kann dies bedeuten, dass Sie das HTTP-Protokoll verwenden, um mit einer Instanz zu sprechen, die das uwsgi-Protokoll spricht. Tun Sie dies nicht." Es ist also klar, dass der Vorschlag falsch ist ... Außerdem hat der @ Kartic-Benutzer bereits versucht, die Option "-b" zu verwenden ...
LittleEaster
14
Ich bin auf dasselbe Problem gestoßen, als ich versucht habe, es unter Nginx auszuführen, und habe die Dokumente hier befolgt . Es ist wichtig zu beachten, dass Sie nach dem Wechsel zu nginx sicherstellen müssen, dass Sie nicht versuchen, auf die App über den durch den Parameter --socket angegebenen Port zuzugreifen, sondern über den Port "listen" in nginx.conf. Obwohl Ihr Problem anders beschrieben wird, stimmt der Titel genau mit dem Problem überein, das ich hatte.
Ja, ich bin auf dasselbe gestoßen. Mit anderen Worten, ich habe eine Fehlermeldung erhalten, als ich den Port lokal zusammengerollt habe, während ich erfolgreich zum 'Speicherort' meines wsgi-Reverse-Proxys navigieren konnte, wie in meiner 'nginx.conf' angegeben, da das Protokoll des wsgi-Servers aktiviert ist meine gewählte Steckdose war wsgi und nicht http
danyamachine
14
Ich könnte das Problem beheben, indem ich --protocol = http zum uwsgi hinzufüge
Wie kann ich dies in der INI-Datei mit den uWSGI-Einstellungen einrichten? Meine Konfiguration funktioniert mit Ihrem Vorschlag, jedoch nur in der Befehlszeile.
Henry Lynx
2
@ HenryLynx, fügen protocol=httpSie einfach zu Ihrer .iniDatei hinzu
151291
7
Dieser Fehler wird angezeigt, wenn der uWSGI-Server das uwsgiProtokoll verwendet und versucht wird, direkt über das httpProtokoll curloder den Webbrowser darauf zuzugreifen . Wenn Sie können, konfigurieren Sie Ihren uWSGI-Server für die Verwendunghttp Protokolls zu , damit Sie über einen Webbrowser oder Curl darauf zugreifen können.
Es gibt auch einen einfachen Reverse-Proxy-Server, uwsgi_proxywenn Sie über einen Webbrowser usw. auf Ihre Anwendung (en) zugreifen müssen. Weitere Informationen finden Sie unter https://stackoverflow.com/a/32893520/179581
Wie in einem anderen Kommentar aus den Dokumenten erwähnt:
Wenn Sie in Ihren Protokollen '21573' als Anforderungsblockgröße erhalten, kann dies bedeuten, dass Sie das HTTP-Protokoll verwenden, um mit einer Instanz zu sprechen, die das uwsgi-Protokoll spricht. Tu das nicht.
Wenn Sie Nginx verwenden, tritt dies auf, wenn Sie diese Konfiguration haben (oder etwas ähnlich Seltsames):
proxy_pass http://unix:/path/to/socket.sock
Dies spricht HTTP mit uWSGI (was es mürrisch macht). Verwenden Sie stattdessen:
k
bei mir nicht funktioniert. Musste die volle Nummer angeben. Es können keine Zeiger auf die Formate gefunden werden, die Sie hier verwenden können.Antworten:
Ich bin auch auf dasselbe Problem gestoßen, als ich einem Tutorial gefolgt bin. Das Problem war, dass ich die Option
socket = 0.0.0.0:8000
anstelle von gesetzt habehttp = 0.0.0.0:8000
.socket
Option, die für die Verwendung mithttp
Routern von Drittanbietern (z. B. Nginx ) vorgesehen ist. Wenn die Option aktiviert ist, kann uwsgi eingehende HTTP-Anforderungen akzeptieren und selbst weiterleiten.quelle
socket = /tmp/myapp.sock
oderhttp = 0.0.0.0:8000
oder was auch immer sein, abhängig von Ihren Bedürfnissen.Die richtige Lösung besteht darin, nicht zum HTTP-Protokoll zu wechseln. Sie müssen nur die Puffergröße in den uWSGI-Einstellungen erhöhen.
oder im Befehlszeilenmodus:
Zitat aus der offiziellen Dokumentation:
Von hier aus: https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html
quelle
http-socket
hier verwenden.uwsgi
Protokoll, dann erhalten Sie möglicherweise auch den gleichen Fehler wie OPhttp-socket
. Alles andere ergab "502 Bad Gateway", selbst wenn die Puffergröße erhöht wurde.Ich bin auf dasselbe Problem gestoßen, als ich versucht habe, es unter Nginx auszuführen, und habe die Dokumente hier befolgt . Es ist wichtig zu beachten, dass Sie nach dem Wechsel zu nginx sicherstellen müssen, dass Sie nicht versuchen, auf die App über den durch den Parameter --socket angegebenen Port zuzugreifen, sondern über den Port "listen" in nginx.conf. Obwohl Ihr Problem anders beschrieben wird, stimmt der Titel genau mit dem Problem überein, das ich hatte.
quelle
Ich könnte das Problem beheben, indem ich --protocol = http zum uwsgi hinzufüge
quelle
protocol=http
Sie einfach zu Ihrer.ini
Datei hinzuDieser Fehler wird angezeigt, wenn der uWSGI-Server das
uwsgi
Protokoll verwendet und versucht wird, direkt über dashttp
Protokollcurl
oder den Webbrowser darauf zuzugreifen . Wenn Sie können, konfigurieren Sie Ihren uWSGI-Server für die Verwendunghttp
Protokolls zu , damit Sie über einen Webbrowser oder Curl darauf zugreifen können.Falls Sie es nicht ändern können (oder wollen), können Sie einen Reverse-Proxy (z. B.
nginx
) vor dem lokalen oder Remote-uWSGI-Server verwenden (siehe) https://uwsgi-docs.readthedocs.org/en/latest/Nginx) .htmlWenn es sich nach zu viel Arbeit anfühlt, probieren Sie das
uwsgi-tools
Python-Paket aus:Es gibt auch einen einfachen Reverse-Proxy-Server,
uwsgi_proxy
wenn Sie über einen Webbrowser usw. auf Ihre Anwendung (en) zugreifen müssen. Weitere Informationen finden Sie unter https://stackoverflow.com/a/32893520/179581quelle
Wie in einem anderen Kommentar aus den Dokumenten erwähnt:
Wenn Sie Nginx verwenden, tritt dies auf, wenn Sie diese Konfiguration haben (oder etwas ähnlich Seltsames):
Dies spricht HTTP mit uWSGI (was es mürrisch macht). Verwenden Sie stattdessen:
quelle
Mann, ich habe das gleiche Problem; Also habe ich es geschafft ... schau mit UWSGI + DJANGO + NGINX + REACT +
1 - nano /etc/uwsgi/sites/app_plataform.ini [uwsgi]
2 - Führen Sie eine ernsthafte Leistungssteigerung für nginx ... user www-data durch.
3 - dann ... Dienste neu starten oder Server neu starten ...
quelle