Obviamente, o tamanho do buffer ainda é o valor padrão (4096), verifique se você está trabalhando na instância correta. Você também pode escrever "-b 32k". Verifique também se esta opção (tamanho do buffer) ainda não está definida em algum arquivo de configuração.
zakinster
Não há arquivo de configuração. Ainda não está funcionando :(
Kartik Rokde 08/04
8
uwsgi-docs.readthedocs.org/en/latest/ThingsToKnow.html você está tentando se conectar a um soquete uwsgi usando o protocolo http, além disso, as opções especificadas para o imperador não são herdadas, é apenas um gerenciador de processos
roberto
@zakinster Por algum motivo, o formato do valor knão funcionou para mim. Tinha que fornecer o número completo. Não encontra indicadores sobre os formatos que você pode usar aqui.
precisa saber é o seguinte
Respostas:
207
Eu também tive o mesmo problema enquanto seguia algum tutorial. O problema foi que eu configurei a opção em socket = 0.0.0.0:8000vez de http = 0.0.0.0:8000.
socketopção destinada a ser usada com algum roteador de terceiros (nginx, por exemplo), enquanto que quando a httpopção está configurada, o uwsgi pode aceitar solicitações HTTP de entrada e encaminhá-las por si só.
Eu gostaria de comentar sobre isso: o uwsgi possui as opções "http", "http-socket" e "socket". Eu queria chamar scripts python cgi; "soquete" foi a resposta.
NuclearPeon
No arquivo de configuração do Nginx, podemos usar isso: include / etc / nginx / uwsgi_params; uwsgi_pass django_upstream;
mennanov
3
Não é a solução correta. E se quisermos unix soquetes?
Farsheed 21/08/2015
2
@ Farsheed, acabei de descrever por que o OP está vendo esse erro. Como corrigi-lo é totalmente sua. Pode ser socket = /tmp/myapp.sockou http = 0.0.0.0:8000ou o que for, dependendo de suas necessidades.
Palasaty
1
Embora essa resposta possa resolver o problema em algumas situações, acho que a resposta correta no caso geral é a fornecida pelo @Farsheed abaixo.
Augusto Destrero 15/11/19
142
A solução correta é não mudar para o protocolo HTTP. Você só precisa aumentar o tamanho do buffer nas configurações do uWSGI.
buffer-size=32768
ou no modo de linha de comando:
-b 32768
Citação da documentação oficial:
Por padrão, o uWSGI aloca um buffer muito pequeno (4096 bytes) para os cabeçalhos de cada solicitação. Se você começar a receber "tamanho de bloco de solicitação inválido" em seus logs, isso pode significar que você precisa de um buffer maior. Aumente-o (até 65535) com a opção de tamanho do buffer.
Se você receber '21573' como o tamanho do bloco de solicitação em seus logs, isso pode significar que você está usando o protocolo HTTP para falar com uma instância que fala o protocolo uwsgi. Não faça isso.
Às vezes, você precisa usar o protocolo http, pois os soquetes unix estão disponíveis apenas na máquina local. Considere uma situação em que você tenha várias máquinas e um balanceador separado em cima delas - você deve usar http-socketaqui.
Palasaty
@Palasaty ou um IP soquete e uwsgiprotocolo, então você também pode obter o mesmo erro como OP
Andrei
2
@Palasaty, por qualquer motivo, a fixação do tamanho do buffer corrigirá o problema!
Farsheed 01/12/2015
Ao usar o nginx como proxy reverso, tive que usar http-socket. Qualquer outra coisa deu "502 Bad Gateway", mesmo quando o tamanho do buffer foi aumentado.
Hubro 29/08/16
Quanto à documentação citada "Se você receber '21573' como o tamanho do bloco de solicitação em seus logs, pode significar que você está usando o protocolo HTTP para falar com uma instância que fala o protocolo uwsgi. Não faça isso." Então, é claro que a sugestão é errado .... Além disso, o usuário @Kartic já tentou usar "-b" opção ...
LittleEaster
14
Encontrei o mesmo problema ao tentar executá-lo no nginx e estava seguindo os documentos aqui . É importante observar que, depois de mudar para o nginx, você deve garantir que não está tentando acessar o aplicativo na porta especificada pelo parâmetro --socket, mas sim na porta "listen" no nginx.conf. Embora seu problema seja descrito de maneira diferente, o título corresponde exatamente ao problema que tive.
Sim, encontrei a mesma coisa. em outras palavras, recebi um erro quando enrolava a porta localmente, enquanto eu conseguia navegar com êxito até o 'local' do meu proxy reverso wsgi conforme especificado no meu `nginx.conf ', porque o protocolo do servidor wsgi no my socket escolhido foi wsgi e não http
danyamachine
14
Eu poderia corrigi-lo adicionando --protocol = http ao uwsgi
Como posso configurar isso no arquivo ini de configurações do uWSGI? Minha configuração funciona com sua sugestão, mas apenas na linha de comando.
Henry Lynx
2
@HenryLynx, basta adicionar protocol=httpao seu .iniarquivo
151291
7
Este erro é mostrado quando o servidor uWSGI está usando o uwsgiprotocolo e tenta-se acessá-lo via httpprotocolo pelo curlnavegador da web ou diretamente. Se puder, tente configurar o servidor uWSGI para usar o httpprotocolo, para que você possa acessá-lo via navegador da Web ou enrolar.
Também existe um servidor proxy reverso simples uwsgi_proxyse você precisar acessar seus aplicativos via navegador da web etc. Veja mais respostas expandidas https://stackoverflow.com/a/32893520/179581
Se você receber '21573' como o tamanho do bloco de solicitação em seus logs, isso pode significar que você está usando o protocolo HTTP para falar com uma instância que fala o protocolo uwsgi. Não faça isso.
Se você estiver usando o Nginx, isso ocorrerá se você tiver esta configuração (ou algo similarmente estranho):
proxy_pass http://unix:/path/to/socket.sock
isso está falando HTTP para o uWSGI (o que o torna irritado). Em vez disso, use:
k
não funcionou para mim. Tinha que fornecer o número completo. Não encontra indicadores sobre os formatos que você pode usar aqui.Respostas:
Eu também tive o mesmo problema enquanto seguia algum tutorial. O problema foi que eu configurei a opção em
socket = 0.0.0.0:8000
vez dehttp = 0.0.0.0:8000
.socket
opção destinada a ser usada com algum roteador de terceiros (nginx, por exemplo), enquanto que quando ahttp
opção está configurada, o uwsgi pode aceitar solicitações HTTP de entrada e encaminhá-las por si só.fonte
socket = /tmp/myapp.sock
ouhttp = 0.0.0.0:8000
ou o que for, dependendo de suas necessidades.A solução correta é não mudar para o protocolo HTTP. Você só precisa aumentar o tamanho do buffer nas configurações do uWSGI.
ou no modo de linha de comando:
Citação da documentação oficial:
A partir daqui: https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html
fonte
http-socket
aqui.uwsgi
protocolo, então você também pode obter o mesmo erro como OPhttp-socket
. Qualquer outra coisa deu "502 Bad Gateway", mesmo quando o tamanho do buffer foi aumentado.Encontrei o mesmo problema ao tentar executá-lo no nginx e estava seguindo os documentos aqui . É importante observar que, depois de mudar para o nginx, você deve garantir que não está tentando acessar o aplicativo na porta especificada pelo parâmetro --socket, mas sim na porta "listen" no nginx.conf. Embora seu problema seja descrito de maneira diferente, o título corresponde exatamente ao problema que tive.
fonte
Eu poderia corrigi-lo adicionando --protocol = http ao uwsgi
fonte
protocol=http
ao seu.ini
arquivoEste erro é mostrado quando o servidor uWSGI está usando o
uwsgi
protocolo e tenta-se acessá-lo viahttp
protocolo pelocurl
navegador da web ou diretamente. Se puder, tente configurar o servidor uWSGI para usar ohttp
protocolo, para que você possa acessá-lo via navegador da Web ou enrolar.Caso você não possa (ou não queira) alterá-lo, use um proxy reverso (por exemplo
nginx
) na frente do servidor uWSGI local ou remoto, consulte https://uwsgi-docs.readthedocs.org/en/latest/Nginx .htmlSe parecer muito trabalho, tente o
uwsgi-tools
pacote python:Também existe um servidor proxy reverso simples
uwsgi_proxy
se você precisar acessar seus aplicativos via navegador da web etc. Veja mais respostas expandidas https://stackoverflow.com/a/32893520/179581fonte
Como apontado em outro comentário dos documentos:
Se você estiver usando o Nginx, isso ocorrerá se você tiver esta configuração (ou algo similarmente estranho):
isso está falando HTTP para o uWSGI (o que o torna irritado). Em vez disso, use:
fonte
o homem está tendo o mesmo problema; então eu fiz isso ... olha usando UWSGI + DJANGO + NGINX + REACT +
1 - nano /etc/uwsgi/sites/app_plataform.ini [uwsgi]
2 - faça uma atualização de desempenho séria no nginx ... user www-data;
3 - então ... reinicie os serviços ou reebote o servidor ...
fonte