我正在以 emperor 模式运行 uwsgi
uwsgi --emperor /path/to/vassals/ --buffer-size=32768
并且收到以下错误信息
invalid request block size: 21327 (max 4096)...skip
怎么办?我也尝试了 -b 32768
。
我正在以 emperor 模式运行 uwsgi
uwsgi --emperor /path/to/vassals/ --buffer-size=32768
并且收到以下错误信息
invalid request block size: 21327 (max 4096)...skip
怎么办?我也尝试了 -b 32768
。
我在跟随某些教程时也遇到了同样的问题。
问题出在我设置了选项 socket = 0.0.0.0:8000
而不是 http = 0.0.0.0:8000
。
socket
选项意图用于与某些第三方路由器(如nginx)一起使用,而当设置了 http
选项时,uwsgi可以接受传入的HTTP请求并自行路由它们。
include /etc/nginx/uwsgi_params;
uwsgi_pass django_upstream;
- mennanovsocket = /tmp/myapp.sock
或者http = 0.0.0.0:8000
,或者其他内容。 - Palasaty正确的解决方案不是切换到HTTP协议。您只需要在uWSGI设置中增加缓冲区大小。
buffer-size=32768
或者在命令行模式下:
-b 32768
官方文档中的引用:
默认情况下,uWSGI为每个请求的头分配了一个非常小的缓冲区(4096字节)。如果日志中开始收到“无效的请求块大小”错误,这可能意味着您需要更大的缓冲区。使用buffer-size选项将其增加(最多65535)。
如果您在日志中将“21573”作为请求块大小接收,则可能意味着您正在使用HTTP协议与使用uwsgi协议的实例进行通信。不要这样做。
来源:https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html
http-socket
。 - Palasatyuwsgi
协议,则可能会遇到与OP相同的错误。 - Andreihttp-socket
。其他任何东西都会出现“502 Bad Gateway”的错误,即使增加了缓冲区大小也是如此。 - Hubro我可以通过在uwsgi中添加--protocol=http
来修复它。
protocol=http
即可。 - 151291我在尝试在nginx下运行时遇到了同样的问题,并且正在按照这里的文档进行操作。需要注意的是,一旦转换为nginx,您必须确保您不是在访问--socket
参数指定的端口上的应用程序,而是在nginx.conf中“listen”的端口上访问应用程序。虽然你的问题描述不同,但标题完全匹配我曾经遇到的问题。
nginx.conf
中指定的wsgi反向代理的“位置”时,因为我选择的套接字上的wsgi服务器协议是wsgi而不是http。 - danyamachine$ pip install uwsgi-tools
$ uwsgi_curl 10.0.0.1:3030
如果您需要通过Web浏览器等方式访问应用程序,还可以使用简单的反向代理服务器uwsgi_proxy
。更多详细答案请参见https://dev59.com/SGjWa4cB1Zd3GeqPoCwW#32893520。
正如文档中的另一条评论所指出的:
如果您在日志中收到“21573”作为请求块大小,则可能是您正在使用HTTP协议与使用uwsgi协议的实例通信。不要这样做。
如果您使用的是Nginx,则会发生这种情况,如果您有以下配置(或类似奇怪的配置):
proxy_pass http://unix:/path/to/socket.sock
这里是向uWSGI发送HTTP请求(这会让它感到烦躁)。相反,请使用:
uwsgi_pass unix:/path/to/socket.sock;
我也遇到了同样的问题;所以我这么做...... 使用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
master = true processes = 33 buffer-size=32768
socket = /home/app_plataform/app_plataform.sock chmod-socket = 777 vacuum = true
2 - 对nginx进行重大性能升级... 用户www-data;
events { 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 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 设置 ##
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 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;
## # 虚拟主机配置 ##
include /etc/nginx/conf.d/.conf; include /etc/nginx/sites-enabled/; }
3 - 然后...重新启动服务或重启服务器...
systemctl restart uwsgi & systemctl restart nginx
对于这个特定的错误 invalid request block size: 21327 (max 4096)...skip
,它取决于您在本地计算机还是远程服务器(AWS......)上运行解决方案。
这个解决方案对我有用,因为我在我的本地计算机和 Docker 容器中都能正常工作。
1 -- 在您的 ini 文件中将 socket = :8000
更改为 http= :8000
这样也可以在 Docker 中完美地工作。
您可以在uWSGI设置中增加缓冲区大小。
快速解决方案是,从浏览器中删除该URL的cookie。
打开浏览器的开发者工具>转到应用程序选项卡并>删除与该URL相关联的cookie。