Rozmiar bufora jest oczywiście nadal wartością domyślną (4096), upewnij się, że pracujesz na właściwej instancji. Możesz także napisać „-b 32k”. Upewnij się również, że ta opcja (rozmiar bufora) nie jest już ustawiona w jakimś pliku konfiguracyjnym.
@zakinster Z jakiegoś powodu format wartości z knie działa dla mnie. Musiał podać pełny numer. Nie mogę znaleźć żadnych wskazówek dotyczących formatów, których możesz tutaj użyć.
Famousgarkin
Odpowiedzi:
207
Również natknąłem się na ten sam problem podczas korzystania z samouczka. Problem polegał na tym, że socket = 0.0.0.0:8000zamiast tego ustawiłem opcję http = 0.0.0.0:8000.
socketopcja przeznaczona do użytku z niektórymi routerami innych firm (na przykład nginx), podczas gdy gdy httpopcja jest ustawiona, uwsgi może akceptować przychodzące żądania HTTP i samodzielnie je kierować.
Chciałbym tylko skomentować to: uwsgi ma opcje "http", "http-socket" i "socket". Chciałem wywołać skrypty Cgi Python; Odpowiedzią było „gniazdo”.
NuclearPeon
W pliku konfiguracyjnym Nginx możemy chcieć użyć tego: include / etc / nginx / uwsgi_params; uwsgi_pass django_upstream;
mennanov
3
To nie jest właściwe rozwiązanie. A co jeśli chcemy unix-owych gniazd?
Farsheed
2
@Farsheed, właśnie opisałem, dlaczego OP widzi ten błąd. Jak to naprawić, zależy wyłącznie od Ciebie. Może to być socket = /tmp/myapp.socklub http = 0.0.0.0:8000cokolwiek w zależności od Twoich potrzeb.
Palasaty
1
Chociaż ta odpowiedź może rozwiązać problem w niektórych sytuacjach, myślę, że poprawną odpowiedzią w ogólnym przypadku jest ta, którą podał poniżej @Farsheed.
Augusto Destrero
142
Prawidłowym rozwiązaniem nie jest przełączanie się na protokół HTTP. Wystarczy zwiększyć rozmiar bufora w ustawieniach uWSGI.
buffer-size=32768
lub w trybie linii poleceń:
-b 32768
Cytat z oficjalnej dokumentacji:
Domyślnie uWSGI przydziela bardzo mały bufor (4096 bajtów) dla nagłówków każdego żądania. Jeśli zaczniesz otrzymywać w swoich logach „nieprawidłowy rozmiar bloku żądań”, może to oznaczać, że potrzebujesz większego bufora. Zwiększ go (do 65535) za pomocą opcji rozmiaru bufora.
Jeśli otrzymujesz w swoich dziennikach wartość „21573” jako rozmiar bloku żądań, może to oznaczać, że używasz protokołu HTTP do komunikacji z instancją używającą protokołu uwsgi. Nie rób tego.
Czasami trzeba mieć , aby korzystać z protokołu HTTP, ponieważ gniazda UNIX są dostępne tylko na lokalnym komputerze. Rozważmy sytuację, gdy masz kilka maszyn, a na nich oddzielny balanser - tu musisz użyć http-socket.
Palasaty
@Palasaty lub gniazdo i uwsgiprotokół IP , wtedy możesz również otrzymać ten sam błąd co OP
Andrei
2
@Palasaty, z jakiejkolwiek przyczyny, naprawienie rozmiaru bufora rozwiąże problem!
Farsheed
Używając nginx jako zwrotnego proxy, musiałem użyć http-socket. Wszystko inne dało „502 Bad Gateway”, nawet jeśli rozmiar bufora został zwiększony.
Hubro
Jeśli chodzi o cytowaną dokumentację: „Jeśli otrzymujesz '21573' jako rozmiar bloku żądań w swoich dziennikach, może to oznaczać, że używasz protokołu HTTP do komunikowania się z instancją używającą protokołu uwsgi. Nie rób tego”. Jest więc jasne, że sugestia jest błędna .... Ponadto użytkownik @Kartic próbował już użyć opcji „-b” ...
LittleEaster
14
Natknąłem się na ten sam problem, próbując uruchomić go pod nginx i postępowałem zgodnie z dokumentami tutaj . Należy zauważyć, że po przełączeniu się na nginx należy upewnić się, że nie próbujemy uzyskać dostępu do aplikacji na porcie określonym przez parametr --socket, ale na porcie „nasłuchiwania” w nginx.conf. Chociaż twój problem jest opisany inaczej, tytuł dokładnie pasuje do tego, co miałem.
tak, wpadłem na to samo. innymi słowy, dostałem błąd, kiedy zwinąłem port lokalnie, podczas gdy mogłem z powodzeniem przejść do 'lokalizacji' mojego odwrotnego proxy wsgi, jak określono w moim `nginx.conf ', ponieważ protokół serwera wsgi na moje wybrane gniazdo to wsgi, a nie http
danyamachine.
14
Mogłem to naprawić dodając --protocol = http do uwsgi
Jak mogę to ustawić w pliku ini ustawień uWSGI? Moja konfiguracja działa zgodnie z twoją sugestią, ale tylko w linii poleceń.
Henry Lynx
2
@HenryLynx, po prostu dodaj protocol=httpdo .inipliku
151291
7
Ten błąd jest wyświetlany, gdy serwer uWSGI używa uwsgiprotokołu i próbuje się uzyskać do niego dostęp za pośrednictwem httpprotokołu bezpośrednio przez curlprzeglądarkę internetową. Jeśli możesz, spróbuj skonfigurować serwer uWSGI do korzystania z httpprotokołu, aby uzyskać do niego dostęp przez przeglądarkę internetową lub curl.
Istnieje również prosty odwrotny serwer proxy, uwsgi_proxyjeśli chcesz uzyskać dostęp do aplikacji za pośrednictwem przeglądarki internetowej itp. Zobacz bardziej rozszerzoną odpowiedź https://stackoverflow.com/a/32893520/179581
Jeśli otrzymujesz w swoich dziennikach wartość „21573” jako rozmiar bloku żądań, może to oznaczać, że używasz protokołu HTTP do komunikacji z instancją używającą protokołu uwsgi. Nie rób tego.
Jeśli używasz Nginx, nastąpi to, jeśli masz taką konfigurację (lub coś podobnie dziwnego):
proxy_pass http://unix:/path/to/socket.sock
to jest rozmowa HTTP do uWSGI (co sprawia, że jest zrzędliwy). Zamiast tego użyj:
k
nie działa dla mnie. Musiał podać pełny numer. Nie mogę znaleźć żadnych wskazówek dotyczących formatów, których możesz tutaj użyć.Odpowiedzi:
Również natknąłem się na ten sam problem podczas korzystania z samouczka. Problem polegał na tym, że
socket = 0.0.0.0:8000
zamiast tego ustawiłem opcjęhttp = 0.0.0.0:8000
.socket
opcja przeznaczona do użytku z niektórymi routerami innych firm (na przykład nginx), podczas gdy gdyhttp
opcja jest ustawiona, uwsgi może akceptować przychodzące żądania HTTP i samodzielnie je kierować.źródło
socket = /tmp/myapp.sock
lubhttp = 0.0.0.0:8000
cokolwiek w zależności od Twoich potrzeb.Prawidłowym rozwiązaniem nie jest przełączanie się na protokół HTTP. Wystarczy zwiększyć rozmiar bufora w ustawieniach uWSGI.
lub w trybie linii poleceń:
Cytat z oficjalnej dokumentacji:
Stąd: https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html
źródło
http-socket
.uwsgi
protokół IP , wtedy możesz również otrzymać ten sam błąd co OPhttp-socket
. Wszystko inne dało „502 Bad Gateway”, nawet jeśli rozmiar bufora został zwiększony.Natknąłem się na ten sam problem, próbując uruchomić go pod nginx i postępowałem zgodnie z dokumentami tutaj . Należy zauważyć, że po przełączeniu się na nginx należy upewnić się, że nie próbujemy uzyskać dostępu do aplikacji na porcie określonym przez parametr --socket, ale na porcie „nasłuchiwania” w nginx.conf. Chociaż twój problem jest opisany inaczej, tytuł dokładnie pasuje do tego, co miałem.
źródło
Mogłem to naprawić dodając --protocol = http do uwsgi
źródło
protocol=http
do.ini
plikuTen błąd jest wyświetlany, gdy serwer uWSGI używa
uwsgi
protokołu i próbuje się uzyskać do niego dostęp za pośrednictwemhttp
protokołu bezpośrednio przezcurl
przeglądarkę internetową. Jeśli możesz, spróbuj skonfigurować serwer uWSGI do korzystania zhttp
protokołu, aby uzyskać do niego dostęp przez przeglądarkę internetową lub curl.Jeśli nie możesz (lub nie chcesz) tego zmienić, możesz użyć odwrotnego proxy (np.
nginx
) Przed lokalnym lub zdalnym serwerem uWSGI, zobacz https://uwsgi-docs.readthedocs.org/en/latest/Nginx .htmlJeśli wydaje ci się, że za dużo pracy, wypróbuj
uwsgi-tools
pakiet Pythona:Istnieje również prosty odwrotny serwer proxy,
uwsgi_proxy
jeśli chcesz uzyskać dostęp do aplikacji za pośrednictwem przeglądarki internetowej itp. Zobacz bardziej rozszerzoną odpowiedź https://stackoverflow.com/a/32893520/179581źródło
Jak wskazano w innym komentarzu z dokumentów:
Jeśli używasz Nginx, nastąpi to, jeśli masz taką konfigurację (lub coś podobnie dziwnego):
to jest rozmowa HTTP do uWSGI (co sprawia, że jest zrzędliwy). Zamiast tego użyj:
źródło
człowiek mam ten sam problem; więc zrobiłem to ... spójrz na UWSGI + DJANGO + NGINX + REACT +
1 - nano /etc/uwsgi/sites/app_plataform.ini [uwsgi]
2 - dokonaj poważnej aktualizacji wydajności na nginx ... dane www użytkownika;
3 - wtedy ... zrestartuj usługi lub uruchom ponownie serwer ...
źródło