我在皇帝模式下运行uwsgi
uwsgi --emperor /path/to/vassals/ --buffer-size=32768
并收到此错误
invalid request block size: 21327 (max 4096)...skip
怎么办?我也试过-b 32768
答案 0 :(得分:168)
我在遵循一些教程的同时遇到了同样的问题。
问题是我设置了选项socket = 0.0.0.0:8000
而不是http = 0.0.0.0:8000
。
socket
选项旨在与某些第三方路由器(例如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)
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