El tamaño del búfer obviamente sigue siendo el valor predeterminado (4096), asegúrese de estar trabajando en la instancia correcta. También puedes escribir "-b 32k". También asegúrese de que esta opción (tamaño de búfer) no esté establecida en algún archivo de configuración.
zakinster
No hay archivo de configuración. Todavía no funciona :(
Kartik Rokde
8
uwsgi-docs.readthedocs.org/en/latest/ThingsToKnow.html está intentando conectarse a un socket uwsgi utilizando el protocolo http, además de esto, las opciones especificadas para el emperador no se heredan, solo es un administrador de procesos
roberto
@zakinster Por alguna razón, el formato de valor con kno funcionó para mí. Tenía que proporcionar el número completo. No puedo encontrar ningún puntero sobre los formatos que puedes usar aquí.
famousgarkin
Respuestas:
207
También me encontré con el mismo problema mientras seguía un tutorial. El problema fue que configuré la opción en socket = 0.0.0.0:8000lugar de http = 0.0.0.0:8000.
socketopción pensada para ser utilizada con algún enrutador de terceros (nginx por ejemplo), mientras que cuando la httpopción está configurada, uwsgi puede aceptar solicitudes HTTP entrantes y enrutarlas por sí mismo.
Solo me gustaría comentar sobre esto: uwsgi tiene las opciones "http", "http-socket" y "socket". Quería llamar a scripts cgi python; "zócalo" fue la respuesta.
NuclearPeon
En el archivo de configuración de Nginx, podemos usar esto: include / etc / nginx / uwsgi_params; uwsgi_pass django_upstream;
mennanov
3
No es la solución correcta. ¿Qué pasa si queremos unix zócalos?
Farsheed
2
@Farsheed, acabo de describir por qué OP está viendo este error. Cómo solucionarlo depende completamente de usted. Puede ser socket = /tmp/myapp.socko http = 0.0.0.0:8000lo que sea, según sus necesidades.
Palasaty
1
Si bien esta respuesta podría resolver el problema en algunas situaciones, creo que la respuesta correcta en el caso general es la proporcionada por @Farsheed a continuación.
Augusto Destrero
142
La solución correcta es no cambiar al protocolo HTTP. Solo necesita aumentar el tamaño del búfer en la configuración de uWSGI.
buffer-size=32768
o en modo de línea de comandos:
-b 32768
Cita de la documentación oficial:
Por defecto, uWSGI asigna un búfer muy pequeño (4096 bytes) para los encabezados de cada solicitud. Si comienza a recibir "tamaño de bloque de solicitud no válido" en sus registros, podría significar que necesita un búfer más grande. Aumente (hasta 65535) con la opción de tamaño de búfer.
Si recibe '21573' como el tamaño de bloque de solicitud en sus registros, podría significar que está utilizando el protocolo HTTP para hablar con una instancia que habla el protocolo uwsgi. No hagas esto.
A veces tiene que usar el protocolo http, ya que los sockets unix solo están disponibles en la máquina local. Considere una situación en la que tiene varias máquinas y un equilibrador separado encima de ellas: debe usarlas http-socketaquí.
Palasaty
@Palasaty o un socket IP y uwsgiprotocolo, entonces también puede obtener el mismo error que OP
Andrei
2
@Palasaty, en cualquier causa, arreglar el tamaño del búfer solucionará el problema.
Farsheed
Cuando usaba nginx como proxy inverso, tenía que usar http-socket. Cualquier otra cosa dio "502 Bad Gateway", incluso cuando se aumentó el tamaño del búfer.
Hubro
En cuanto a la documentación citada "Si recibe '21573' como el tamaño del bloque de solicitud en sus registros, podría significar que está utilizando el protocolo HTTP para hablar con una instancia que habla el protocolo uwsgi. No haga esto". Así que está claro que la sugerencia es incorrecta ... Además, el usuario @Kartic ya ha intentado usar la opción "-b" ...
LittleEaster
14
Me encontré con el mismo problema al intentar ejecutarlo en nginx y seguí los documentos aquí . Es importante tener en cuenta que una vez que cambie a nginx, debe asegurarse de no intentar acceder a la aplicación en el puerto especificado por --socket param, sino más bien al puerto "escuchar" en nginx.conf. Aunque su problema se describe de manera diferente, el título coincide exactamente con el problema que tuve.
Sí, me encontré con lo mismo. en otras palabras, recibí un error cuando enrosqué el puerto localmente, mientras que pude navegar con éxito a la 'ubicación' de mi proxy inverso wsgi como se especifica en mi 'nginx.conf', porque el protocolo del servidor wsgi en mi socket elegido era wsgi y no http
danyamachine
14
Podría arreglarlo agregando --protocol = http al uwsgi
¿Cómo puedo configurar esto en el archivo ini de la configuración de uWSGI? Mi configuración funciona con su sugerencia pero solo en la línea de comando.
Henry Lynx
2
@HenryLynx, solo agregue protocol=httpa su .iniarchivo
151291
7
Este error se muestra cuando el servidor uWSGI está utilizando el uwsgiprotocolo y uno intenta acceder a él a través del httpprotocolo mediante curlun navegador web directamente. Si puede, intente configurar su servidor uWSGI para usar el httpprotocolo, de modo que pueda acceder a él a través del navegador web o curl.
También hay un servidor proxy inverso simple uwsgi_proxysi necesita acceder a sus aplicaciones a través del navegador web, etc. Vea una respuesta más amplia https://stackoverflow.com/a/32893520/179581
Como se señaló en otro comentario de los documentos:
Si recibe '21573' como el tamaño de bloque de solicitud en sus registros, podría significar que está utilizando el protocolo HTTP para hablar con una instancia que habla el protocolo uwsgi. No hagas esto.
Si está utilizando Nginx, esto ocurrirá si tiene esta configuración (o algo similar):
proxy_pass http://unix:/path/to/socket.sock
esto está hablando de HTTP a uWSGI (lo que lo hace gruñón). En cambio, use:
k
no funcionó para mí. Tenía que proporcionar el número completo. No puedo encontrar ningún puntero sobre los formatos que puedes usar aquí.Respuestas:
También me encontré con el mismo problema mientras seguía un tutorial. El problema fue que configuré la opción en
socket = 0.0.0.0:8000
lugar dehttp = 0.0.0.0:8000
.socket
opción pensada para ser utilizada con algún enrutador de terceros (nginx por ejemplo), mientras que cuando lahttp
opción está configurada, uwsgi puede aceptar solicitudes HTTP entrantes y enrutarlas por sí mismo.fuente
socket = /tmp/myapp.sock
ohttp = 0.0.0.0:8000
lo que sea, según sus necesidades.La solución correcta es no cambiar al protocolo HTTP. Solo necesita aumentar el tamaño del búfer en la configuración de uWSGI.
o en modo de línea de comandos:
Cita de la documentación oficial:
Desde aquí: https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html
fuente
http-socket
aquí.uwsgi
protocolo, entonces también puede obtener el mismo error que OPhttp-socket
. Cualquier otra cosa dio "502 Bad Gateway", incluso cuando se aumentó el tamaño del búfer.Me encontré con el mismo problema al intentar ejecutarlo en nginx y seguí los documentos aquí . Es importante tener en cuenta que una vez que cambie a nginx, debe asegurarse de no intentar acceder a la aplicación en el puerto especificado por --socket param, sino más bien al puerto "escuchar" en nginx.conf. Aunque su problema se describe de manera diferente, el título coincide exactamente con el problema que tuve.
fuente
Podría arreglarlo agregando --protocol = http al uwsgi
fuente
protocol=http
a su.ini
archivoEste error se muestra cuando el servidor uWSGI está utilizando el
uwsgi
protocolo y uno intenta acceder a él a través delhttp
protocolo mediantecurl
un navegador web directamente. Si puede, intente configurar su servidor uWSGI para usar elhttp
protocolo, de modo que pueda acceder a él a través del navegador web o curl.En caso de que no pueda (o no quiera) cambiarlo, puede usar un proxy inverso (por ejemplo
nginx
) frente al servidor uWSGI local o remoto, consulte https://uwsgi-docs.readthedocs.org/en/latest/Nginx .htmlSi le parece demasiado trabajo, pruebe el
uwsgi-tools
paquete python:También hay un servidor proxy inverso simple
uwsgi_proxy
si necesita acceder a sus aplicaciones a través del navegador web, etc. Vea una respuesta más amplia https://stackoverflow.com/a/32893520/179581fuente
Como se señaló en otro comentario de los documentos:
Si está utilizando Nginx, esto ocurrirá si tiene esta configuración (o algo similar):
esto está hablando de HTTP a uWSGI (lo que lo hace gruñón). En cambio, use:
fuente
el hombre tengo el mismo problema; así que lo hice ... mira usando UWSGI + DJANGO + NGINX + REACT +
1 - nano /etc/uwsgi/sites/app_plataform.ini [uwsgi]
2 - realice una actualización seria de rendimiento en nginx ... usuario www-data;
3 - luego ... reinicie los servicios o reebot server ...
fuente