uwsgi 请求块大小无效

问题描述 投票:0回答:9

我正在皇帝模式下运行uwsgi

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

并收到此错误

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

该怎么办?我也试过

-b 32768

uwsgi
9个回答
265
投票

我在遵循一些教程时也遇到了同样的问题。 问题是我设置了选项

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


201
投票

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

buffer-size=32768

或在命令行模式下:

-b 32768

引用官方文档:

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

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

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


20
投票

我可以修复它,将

--protocol=http
添加到 uwsgi。


14
投票

我在尝试在 nginx 下运行它时遇到了同样的问题,并遵循了 文档这里。需要注意的是,一旦切换到 nginx,您必须确保您没有尝试访问由

--socket
参数指定的端口上的应用程序,而是访问 nginx.conf 中的“监听”端口。尽管您的问题描述不同,但标题与我遇到的问题完全匹配。


9
投票

当uWSGI服务器使用

uwsgi
协议并且尝试通过
http
协议或网络浏览器直接访问它时,会显示此错误。如果可以的话,尝试将您的uWSGI服务器配置为使用
curl
协议,这样您就可以通过网络浏览器或curl访问它。

如果您无法(或不想)更改它,您可以在本地或远程uWSGI服务器前面使用反向代理(例如

http

),请参阅

https://uwsgi-docs.readthedocs.org/ en/latest/Nginx.html
如果感觉工作量太大,请尝试

nginx

python 包:


uwsgi-tools

还有一个简单的反向代理服务器
$ pip install uwsgi-tools $ uwsgi_curl 10.0.0.1:3030

如果您需要通过网络浏览器等访问您的应用程序。请参阅更多扩展答案

https://stackoverflow.com/a/32893520/179581


6
投票

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

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

uwsgi_proxy

这是与 uWSGI 进行 HTTP 对话(这使得它变得脾气暴躁)。相反,使用:

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



0
投票
uwsgi_pass unix:/path/to/socket.sock;

这取决于您在本地计算机或远程服务器(AWS......)上运行解决方案的位置。

这个解决方案对我有用,因为我对在我的本地计算机上以及在 Docker 容器中工作的情况感到耸耸肩
1 -- 将 ini 文件中的 

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

更改为

socket = :8000
这也可以在 docker 中完美运行


0
投票

1 -

http= :8000

[uwsgi]

nano /etc/uwsgi/sites/app_plataform.ini

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

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 master = true processes = 33 buffer-size=32768 socket = /home/app_plataform/app_plataform.sock chmod-socket = 777 vacuum = true

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

#worker_processes auto; worker_processes 4; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 4092; multi_accept on; } http { ##UPGRADE CONFIGS 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; ## # Basic Settings ## sendfile on; 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; include /etc/nginx/mime.types; default_type application/octet-stream; ## # SSL Settings ## ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; gzip_comp_level 2; gzip_min_length 1000; gzip_proxied expired no-cache no-store private auth; 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; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }



-1
投票

快速解决方案是从浏览器中删除该 URL 的 cookie。

在浏览器中打开开发人员工具 > 转到“应用程序”选项卡并 > 删除与 URL 关联的 cookie。

© www.soinside.com 2019 - 2024. All rights reserved.