uwsgi dimensione blocco richiesta non valida


142

Sto correndo Uwsgi in modalità Imperatore

uwsgi --emperor /path/to/vassals/ --buffer-size=32768

e ottenere questo errore

invalid request block size: 21327 (max 4096)...skip

Cosa fare?? Ho anche provato -b 32768


1
La dimensione del buffer è ovviamente ancora il valore predefinito (4096), assicurati di lavorare sull'istanza giusta. Puoi anche scrivere "-b 32k". Assicurarsi inoltre che questa opzione (dimensione buffer) non sia già impostata in alcuni file di configurazione.
zakinster,

Non ci sono file di configurazione. Ancora non funzionante :(
Kartik Rokde

8
uwsgi-docs.readthedocs.org/en/latest/ThingsToKnow.html stai provando a connetterti a un socket uwsgi usando il protocollo http, inoltre le opzioni specificate per l'imperatore non sono ereditate, è solo un gestore di processo
roberto

@zakinster Per qualche motivo il formato del valore con knon ha funzionato per me. Ho dovuto fornire il numero completo. Non è possibile trovare alcun puntatore sui formati che è possibile utilizzare qui.
famosogarkin

Risposte:


207

Anche io ho riscontrato lo stesso problema mentre seguivo un tutorial. Il problema era che ho impostato l'opzione socket = 0.0.0.0:8000invece di http = 0.0.0.0:8000. socketopzione pensata per essere utilizzata con alcuni router di terze parti (ad esempio nginx), mentre quando l' httpopzione è impostata uwsgi può accettare le richieste HTTP in arrivo e instradarle da solo.


5
Vorrei solo commentare questo: uwsgi ha le opzioni "http", "http-socket" e "socket". Volevo chiamare script cgi python; "socket" è stata la risposta.
NuclearPeon

Nel file di configurazione di Nginx potremmo voler usare questo: include / etc / nginx / uwsgi_params; uwsgi_pass django_upstream;
mennanov,

3
Non è la soluzione corretta. Cosa succede se vogliamo unix socket?
Farsheed,

2
@Farsheed, ho appena descritto perché OP sta vedendo questo errore. Come risolverlo dipende completamente da te. Può essere socket = /tmp/myapp.socko http = 0.0.0.0:8000qualunque cosa a seconda delle tue esigenze.
Palasaty,

1
Sebbene questa risposta possa risolvere il problema in alcune situazioni, penso che la risposta corretta nel caso generale sia quella fornita da @Farsheed di seguito.
Augusto Destrero,

142

La soluzione corretta non è passare al protocollo HTTP. Hai solo bisogno di aumentare la dimensione del buffer nelle impostazioni uWSGI.

buffer-size=32768

o in modalità riga di comando:

-b 32768

Citazione dalla documentazione ufficiale:

Per impostazione predefinita, uWSGI alloca un buffer molto piccolo (4096 byte) per le intestazioni di ogni richiesta. Se inizi a ricevere "dimensioni del blocco richieste non valide" nei tuoi registri, ciò potrebbe significare che hai bisogno di un buffer più grande. Aumentalo (fino a 65535) con l'opzione dimensione buffer.

Se ricevi '21573' come dimensione del blocco di richiesta nei tuoi log, potrebbe significare che stai usando il protocollo HTTP per parlare con un'istanza che parla il protocollo uwsgi. Non farlo

Da qui: https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html


1
A volte è necessario utilizzare il protocollo http, poiché i socket unix sono disponibili solo sul computer locale. Considera una situazione in cui hai un numero di macchine e un bilanciatore separato sopra di esse - devi usare http-socketqui.
Palasaty,

@Palasaty o un socket e uwsgiprotocollo IP , è possibile che venga visualizzato lo stesso errore di OP
Andrei,

2
@Palasaty, in ogni caso, la correzione della dimensione del buffer risolverà il problema!
Farsheed,

Quando ho usato nginx come proxy inverso ho dovuto usare http-socket. Qualsiasi altra cosa ha dato "502 Bad Gateway", anche quando la dimensione del buffer è stata aumentata.
Hubro,

Per quanto riguarda la documentazione citata "Se ricevi '21573' come dimensione del blocco di richiesta nei tuoi registri, potrebbe significare che stai usando il protocollo HTTP per parlare con un'istanza che parla il protocollo uwsgi. Non farlo." Quindi è chiaro che il suggerimento è sbagliato .... Inoltre, l'utente @Kartic ha già provato a utilizzare l'opzione "-b" ...
LittleEaster

14

Ho riscontrato lo stesso problema nel tentativo di eseguirlo con nginx e seguivo i documenti qui . È importante notare che una volta che passi a nginx devi assicurarti di non provare ad accedere all'app sulla porta specificata dal parametro --socket ma piuttosto alla porta "hear" in nginx.conf. Sebbene il tuo problema sia descritto in modo diverso, il titolo corrisponde esattamente al problema che ho avuto.


si mi sono imbattuto nella stessa cosa. in altre parole, ho ricevuto un errore quando ho arricciato la porta localmente, mentre ho potuto navigare con successo verso la 'posizione' del mio proxy inverso wsgi come specificato in `nginx.conf ', perché il protocollo del server wsgi su il mio socket scelto era wsgi e non http
danyamachine il

14

Potrei risolverlo aggiungendo --protocol = http a uwsgi


2
Come posso configurarlo nel file ini delle impostazioni uWSGI? La mia configurazione funziona con i tuoi suggerimenti ma solo nella riga di comando.
Henry Lynx,

2
@HenryLynx, basta aggiungere protocol=httpal tuo .inifile
151291

7

Questo errore viene visualizzato quando il server uSGI utilizza il uwsgiprotocollo e si tenta di accedervi direttamente tramite httpprotocollo curlo browser Web. Se possibile, prova a configurare il tuo server uWSGI per utilizzare il httpprotocollo, in modo da poter accedervi tramite browser Web o arricciatura.

Nel caso in cui non sia possibile (o non si desideri) modificarlo, è possibile utilizzare un proxy inverso (ad es. nginx) Davanti al server uWSGI locale o remoto, consultare https://uwsgi-docs.readthedocs.org/en/latest/Nginx .html

Se sembra troppo lavoro, prova il uwsgi-toolspacchetto python:

$ pip install uwsgi-tools

$ uwsgi_curl 10.0.0.1:3030

Esiste anche un semplice server proxy inverso uwsgi_proxyse è necessario accedere alle applicazioni tramite browser Web ecc. Vedere la risposta più estesa https://stackoverflow.com/a/32893520/179581


2

Come sottolineato in un altro commento dai documenti:

Se ricevi '21573' come dimensione del blocco di richiesta nei tuoi log, potrebbe significare che stai usando il protocollo HTTP per parlare con un'istanza che parla il protocollo uwsgi. Non farlo

Se si utilizza Nginx, ciò si verificherà se si dispone di questa configurazione (o qualcosa di altrettanto strano):

proxy_pass http://unix:/path/to/socket.sock

questo sta parlando da HTTP a uWSGI (il che lo rende scontroso). Invece, usa:

uwsgi_pass unix:/path/to/socket.sock;

0

man im havin stesso problema; quindi l'ho fatto ... guarda usando UWSGI + DJANGO + NGINX + REACT +

1 - nano /etc/uwsgi/sites/app_plataform.ini [uwsgi]

DJANGO_SETTINGS_MODULE = app_plataform.settings env = DJANGO_SETTINGS_MODULE settings.configure ()

chdir = / home / app_plataform home = / root / app_plataform module = prometheus_plataform.wsgi: applicazione

master = processi veri = 33 buffer-size = 32768

socket = /home/app_plataform/app_plataform.sock chmod-socket = 777 vacuum = true

2 - eseguire un serio aggiornamento delle prestazioni su nginx ... user www-data;

worker_processes auto; worker_processes 4; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf;

eventi {worker_connections 4092; multi_accept on; }

http {## CONFIGURAZIONI DI AGGIORNAMENTO

client_body_buffer_size 16K; client_header_buffer_size 16k; client_max_body_size 32m; #large_client_header_buffers 2 1k;

client_body_timeout 12; client_header_timeout 12; keepalive_timeout 15; send_timeout 10; access_log off;

## # Impostazioni di base ##

file di trasmissione attivo; tcp_nopush on; tcp_nodelay on; #keepalive_timeout 65; types_hash_max_size 2048; server_tokens off;

server_names_hash_bucket_size 64; # server_name_in_redirect disattivato;

include /etc/nginx/mime.types; default_type application / octet-stream;

## # Impostazioni SSL ##

protocolli ssl TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers su;

## # Impostazioni di registrazione ##

access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log;

## # Impostazioni Gzip ##

gzip on; gzip_comp_level 2; gzip_min_length 1000; gzip_proxied
autenticazione privata no-store scaduta no-cache; gzip_types text / applicazione semplice / x-javascript text / xml text / css application / xml; gzip_vary su;

#gzip_proxied any; #gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; #gzip_types text / plain text / css application / json application / javascript text / xml application / xml application / xml + rss text / javascript;

## # Virtual Host Configs ##

include /etc/nginx/conf.d/ .conf; include / etc / nginx / sites-enabled / ; }

3 - quindi ... riavvia i servizi o riavvia il server ...

systemctl restart uwsgi & systemctl restart nginx

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.