uwsgi无效的请求块大小

时间:2013-04-08 11:42:57

标签: uwsgi

我在皇帝模式下运行uwsgi

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

并收到此错误

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

怎么办?我也试过-b 32768

7 个答案:

答案 0 :(得分:168)

我在遵循一些教程的同时遇到了同样的问题。 问题是我设置了选项socket = 0.0.0.0:8000而不是http = 0.0.0.0:8000socket选项旨在与某些第三方路由器(例如nginx)一起使用,而当设置http选项时,uwsgi可以接受传入的HTTP请求并自行路由它们。

答案 1 :(得分:107)

正确的解决方案是不切换到HTTP协议。您只需要在uWSGI设置中增加缓冲区大小。

buffer-size=32768

或在命令行模式下:

-b 32768

从官方文档中引用:

  

默认情况下,uWSGI为每个请求的标头分配一个非常小的缓冲区(4096字节)。如果您开始在日志中收到“无效的请求块大小”,则可能意味着您需要更大的缓冲区。使用缓冲区大小选项增加它(最多65535)。

     

如果在日志中收到'21573'作为请求块大小,则可能意味着您正在使用HTTP协议与说出uwsgi协议的实例对话。不要这样做。

从这里开始:https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html

答案 2 :(得分:13)

我遇到了同样的问题,试图在nginx下运行它并且正在关注 docs here。重要的是要注意,一旦切换到nginx,你必须确保你没有尝试访问--socket param指定的端口上的应用程序,而是访问nginx.conf中的“listen”端口。虽然您的问题描述不同,但标题与我遇到的问题完全匹配。

答案 3 :(得分:13)

我可以修复它将--protocol = http添加到uwsgi

答案 4 :(得分:5)

当uWSGI服务器使用uwsgi协议并且尝试通过http协议通过curl或Web浏览器直接访问该协议时,会显示此错误。如果可以,请尝试将uWSGI服务器配置为使用http协议,以便您可以通过Web浏览器或卷曲访问它。

如果您不能(或不想)更改它,您可以在本地或远程uWSGI服务器前使用反向代理(例如nginx),请参阅https://uwsgi-docs.readthedocs.org/en/latest/Nginx.html

如果觉得工作太多,请尝试uwsgi-tools python包:

$ pip install uwsgi-tools

$ uwsgi_curl 10.0.0.1:3030

如果您需要通过网络浏览器等访问您的应用程序,还有一个简单的反向代理服务器uwsgi_proxy。请参阅更多扩展答案https://stackoverflow.com/a/32893520/179581

答案 5 :(得分:0)

正如文档中的另一条评论所指出的:

  

如果您在日志中收到的请求块大小为“ 21573”,则可能意味着您正在使用HTTP协议与使用uwsgi协议的实例进行通信。不要这样做。

如果您使用的是Nginx,如果您具有此配置(或类似的奇怪内容),则会发生这种情况:

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

这是与uWSGI对话的HTTP(这使它变得脾气暴躁)。而是使用:

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

答案 6 :(得分:0)

我有同样的问题; 所以我做到了... 使用UWSGI + DJANGO + NGINX + REACT +

1-纳米/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 模块= prometheus_plataform.wsgi:应用程序

master = true进程= 33缓冲区大小= 32768

socket = /home/app_plataform/app_plataform.sock chmod-socket = 777真空= true

2-对Nginx ...用户www-data进行严重的性能升级;

worker_processes自动; 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关闭;

###基本设置##

发送文件; tcp_nopush on; tcp_nodelay; #keepalive_timeout 65; types_hash_max_size 2048; server_tokens关闭;

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;

###记录设置##

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文字/纯文字 application / x-javascript text / xml text / css application / xml; gzip_vary 上;

#gzip_proxied任何; #gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; #gzip_types文字/纯文字/ css 应用程序/ json应用程序/ javascript文本/ xml应用程序/ xml application / xml + rss text / javascript;

###虚拟主机配置##

包括/etc/nginx/conf.d/.conf;包括 / etc / nginx / sites-enabled / ; }

3-然后...重新启动服务或reebot服务器...

systemctl重新启动uwsgi和systemctl重新启动nginx