uwsgiのリクエストブロックサイズが無効です


142

皇帝モードでuwsgiを実行しています

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

そしてこのエラーを取得

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

何をすべきか??私も試しました-b 32768


1
バッファサイズは明らかにデフォルト値(4096)のままです。適切なインスタンスで作業していることを確認してください。「-b 32k」と書くこともできます。また、このオプション(buffer-size)が一部の構成ファイルですでに設定されていないことを確認してください。
zakinster 2013

設定ファイルはありません。まだ機能しない:(
Kartik Rokde

8
uwsgi-docs.readthedocs.org/en/latest/ThingsToKnow.html httpプロトコルを使用してuwsgiソケットに接続しようとしています。これに加えて、皇帝に指定されたオプションは継承されません。これは単なるプロセスマネージャーです
ロベルト

@zakinster何らかの理由で、値の形式が機能kしませんでした。フルナンバーを提供する必要がありました。ここで使用できる形式へのポインタが見つかりません。
有名なガーキン、2015年

回答:


207

私もいくつかのチュートリアルを続けている間に同じ問題に遭遇しました。問題は、のsocket = 0.0.0.0:8000代わりにオプションを設定したことですhttp = 0.0.0.0:8000socket一部のサードパーティ製ルーター(nginxなど)で使用するためのhttpオプションですが、オプションが設定されている場合、uwsgiは着信HTTP要求を受け入れ、それ自体でルーティングできます。


5
これについてコメントしたいのですが、uwsgiには「http」、「http-socket」、「socket」のオプションがあります。私はcgi pythonスクリプトを呼び出したかった。「ソケット」が答えでした。
NuclearPeon 2014年

Nginx設定ファイルでこれを使用したい場合があります:/ etc / nginx / uwsgi_paramsを含めてください。uwsgi_pass django_upstream;
mennanov 2015

3
それは正しい解決策ではありません。ソケットをunixしたい場合はどうなりますか?
Farsheed 2015

2
@ Farsheed、OPでこのエラーが発生する理由を説明しました。修正方法は完全にあなた次第です。それであってもよいsocket = /tmp/myapp.sockか、http = 0.0.0.0:8000または任意のニーズに応じて。
Palasaty

1
この答えはいくつかの状況で問題を解決する可能性がありますが、一般的な場合の正しい答えは、以下の@Farsheedによって提供されるものだと思います。
Augusto Destrero

142

正しい解決策は、HTTPプロトコルに切り替えないことです。uWSGI設定でバッファサイズを増やす必要があるだけです。

buffer-size=32768

またはコマンドラインモード:

-b 32768

公式ドキュメントからの引用:

デフォルトでは、uWSGIは各リクエストのヘッダーに非常に小さなバッファー(4096バイト)を割り当てます。ログで「無効なリクエストブロックサイズ」を受け取り始めた場合は、より大きなバッファが必要であることを意味している可能性があります。buffer-sizeオプションを使用して(最大65535まで)増やします。

ログでリクエストブロックサイズとして「21573」を受け取った場合は、HTTPプロトコルを使用して、uwsgiプロトコルを話すインスタンスと通信している可能性があります。これを行わないでください。

ここから:https : //uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html


1
UNIXソケットはローカルマシンでしか使用できないため、httpプロトコルを使用する必要がある場合あります。いくつかのマシンとそれらの上に別のバランサーがある場合を考えてください- http-socketここで使用する必要があります。
Palasaty

@PalasatyまたはIPソケットとuwsgiプロトコルの場合、OPと同じエラーが発生する可能性があります
Andrei

2
@Palasaty、何らかの理由で、バッファサイズを修正すると問題が修正されます!
Farsheed

nginxをリバースプロキシとして使用する場合は、を使用する必要がありましたhttp-socket。バッファサイズを増やした場合でも、他の場合は「502 Bad Gateway」が発生しました。
Hubro

引用されたドキュメントについては、「ログでリクエストブロックサイズとして「21573」を受け取った場合、HTTPプロトコルを使用して、uwsgiプロトコルを話すインスタンスと対話している可能性があります。これを行わないでください。」したがって、提案が間違っていることは明らかです。...また、@ Karticユーザーはすでに「-b」オプションを使用しようとしました...
LittleEaster

14

私はnginxの下でそれを実行しようとして同じ問題に遭遇し、ここのドキュメントに従っていました。nginxに切り替えたら、-socketパラメータで指定されたポートではなく、nginx.confの「リッスン」ポートでアプリにアクセスしないようにする必要があることに注意してください。あなたの問題は異なって説明されていますが、タイトルは私が抱えていた問題と正確に一致します。


はい、私は同じ事に遭遇しました。言い換えると、ポートをローカルで丸めたときにエラーが発生しましたが、「nginx.conf」で指定されているwsgiリバースプロキシの「場所」に正常に移動できました。これは、wsgiサーバーのプロトコルが私が選んだソケットはwsgiで、httpではありませんでした
danyamachine '20 / 08/20

14

--protocol = httpをuwsgiに追加して修正できます


2
これをuWSGI設定iniファイルでどのように設定できますか?私の構成はあなたの提案で機能しますが、コマンドラインでのみ機能します。
Henry Lynx 2018年

2
@HenryLynx、ファイルに追加protocol=httpするだけ.ini
151291

7

このエラーは、uWSGIサーバーがuwsgiプロトコルを使用していて、httpプロトコルcurlまたはWebブラウザを介して直接アクセスしようとしたときに表示されます。可能であれば、httpプロトコルを使用するようにuWSGIサーバーを構成して、Webブラウザーまたはcurl経由でアクセスできるようにします。

変更できない(または変更したくない)場合はnginx、ローカルまたはリモートのuWSGIサーバーの前でリバースプロキシ(など)を使用できます。https: //uwsgi-docs.readthedocs.org/en/latest/Nginxを参照してください。 .html

作業量が多すぎる場合は、uwsgi-toolspythonパッケージを試してみてください。

$ pip install uwsgi-tools

$ uwsgi_curl 10.0.0.1:3030

uwsgi_proxyWebブラウザーなどを介してアプリケーションにアクセスする必要がある場合は、単純なリバースプロキシサーバーもあります。より詳細な回答を参照してくださいhttps://stackoverflow.com/a/32893520/179581


2

ドキュメントからの別のコメントで指摘されているように:

ログでリクエストブロックサイズとして「21573」を受け取った場合は、HTTPプロトコルを使用して、uwsgiプロトコルを話すインスタンスと通信している可能性があります。これを行わないでください。

Nginxを使用している場合、この構成(または同様に奇妙なもの)を使用していると、これが発生します。

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

これは、HTTPをuWSGIに話します(これにより不機嫌になります)。代わりに、次を使用します。

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

0

男は同じ問題を抱えています。だから私はそれをやった... 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:application

マスター=真のプロセス= 33バッファーサイズ= 32768

ソケット= /home/app_plataform/app_plataform.sock chmod-socket = 777バキューム= true

2-nginxで深刻なパフォーマンスのアップグレードを行います...ユーザーwww-data;

worker_processes auto; worker_processes 4; pid /run/nginx.pid; /etc/nginx/modules-enabled/*.confを含めます。

イベント{worker_connections 4092; multi_accept on; }

http {##アップグレード構成

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;

## # 基本設定 ##

sendfileがオン。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 off;

/etc/nginx/mime.typesを含めます。default_type application / octet-stream;

###SSL設定##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #SSLv3を削除、参照:POODLE ssl_prefer_server_ciphers on;

###ログ設定##

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

###Gzip設定##

gzipオン; gzip_comp_level 2; gzip_min_length 1000; gzip_proxied
期限切れ、キャッシュなし、ストアプライベート認証。gzip_types text / plain application / x-javascript text / xml text / css application / xml; gzip_vary on;

#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;

###仮想ホスト構成##

/etc/nginx/conf.d/ .confを含めます。/ etc / nginx / sites-enabled /を含めます。}

3-次に...サービスまたはreebotサーバーを再起動します...

systemctl restart uwsgi&systemctl restart nginx

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.