168

我在皇帝模式下运行 uwsgi

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

并得到这个错误

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

该怎么办??我也试过 -b 32768

4

7 回答 7

242

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

于 2014-01-17T09:36:52.230 回答
178

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

buffer-size=32768

或在命令行模式下:

-b 32768

引用官方文档:

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

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

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

于 2014-11-15T00:54:58.423 回答
17

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

于 2014-09-26T09:57:08.977 回答
14

我在尝试在 nginx 下运行它时遇到了同样的问题,并且正在关注此处的文档。需要注意的是,一旦你切换到 nginx,你必须确保你没有试图访问 --socket 参数指定的端口上的应用程序,而是 nginx.conf 中的“监听”端口。尽管您的问题描述不同,但标题与我遇到的问题完全匹配。

于 2013-08-28T00:01:26.193 回答
8

当 uWSGI 服务器正在使用uwsgi协议并且尝试通过http协议curl或 Web 浏览器直接访问它时,会显示此错误。如果可以,请尝试将您的 uWSGI 服务器配置为使用http协议,以便您可以通过 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_proxy如果您需要通过 Web 浏览器等访问您的应用程序,还有一个简单的反向代理服务器。查看更多扩展答案https://stackoverflow.com/a/32893520/179581

于 2015-10-01T18:54:14.167 回答
3

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

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

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

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

这是在向 uWSGI 发送 HTTP(这让人很不爽)。相反,使用:

uwsgi_pass unix:/path/to/socket.sock;
于 2019-12-31T22:49:44.193 回答
0

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

1 - 纳米 /etc/uwsgi/sites/app_plataform.ini [uwsgi]

DJANGO_SETTINGS_MODULE = app_plataform.settings 环境 = DJANGO_SETTINGS_MODULE settings.configure()

chdir = /home/app_plataform 主页 = /root/app_plataform 模块 = prometheus_plataform.wsgi:application

主 = 真正的进程 = 33 缓冲区大小 = 32768

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

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

worker_processes 自动;worker_processes 4;pid /run/nginx.pid; 包括/etc/nginx/modules-enabled/*.conf;

事件 {worker_connections 4092; 多接受;}

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;发送超时 10;access_log 关闭;

## # 基本设置 ##

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

server_names_hash_bucket_size 64;# server_name_in_redirect 关闭;

包括/etc/nginx/mime.types;default_type 应用程序/八位字节流;

## # SSL 设置 ##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;# 删除 SSLv3,参考:POODLE ssl_prefer_server_ciphers on;

## # 日志设置 ##

access_log /var/log/nginx/access.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 任何;#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 重启 uwsgi & systemctl 重启 nginx

于 2020-02-05T01:38:08.953 回答