我正在皇帝模式下运行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请求并自行路由它们。
正确的解决方案是不要切换到HTTP协议。你只需要在uWSGI设置中增加缓冲区大小。
buffer-size=32768
或在命令行模式下:
-b 32768
引用官方文档:
默认情况下,uWSGI 为每个请求的标头分配一个非常小的缓冲区(4096 字节)。如果您开始在日志中收到“无效的请求块大小”,则可能意味着您需要更大的缓冲区。使用缓冲区大小选项增加它(最多 65535)。
如果您在日志中收到“21573”作为请求块大小,则可能意味着您正在使用 HTTP 协议与使用 uwsgi 协议的实例进行通信。不要这样做。
从这里:https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html
我可以修复它,将
--protocol=http
添加到 uwsgi。
我在尝试在 nginx 下运行它时遇到了同样的问题,并遵循了 文档这里。需要注意的是,一旦切换到 nginx,您必须确保您没有尝试访问由
--socket
参数指定的端口上的应用程序,而是访问 nginx.conf 中的“监听”端口。尽管您的问题描述不同,但标题与我遇到的问题完全匹配。
当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
如果您在日志中收到“21573”作为请求块大小,则可能意味着您正在使用 HTTP 协议与使用 uwsgi 协议的实例进行通信。不要这样做。
如果您使用 Nginx,如果您有此配置(或类似奇怪的东西),就会发生这种情况:
uwsgi_proxy
这是与 uWSGI 进行 HTTP 对话(这使得它变得脾气暴躁)。相反,使用:
proxy_pass http://unix:/path/to/socket.sock
uwsgi_pass unix:/path/to/socket.sock;
这取决于您在本地计算机或远程服务器(AWS......)上运行解决方案的位置。
这个解决方案对我有用,因为我对在我的本地计算机上以及在 Docker 容器中工作的情况感到耸耸肩 1 -- 将 ini 文件中的invalid request block size: 21327 (max 4096)...skip
更改为
socket = :8000
这也可以在 docker 中完美运行
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/*; }
快速解决方案是从浏览器中删除该 URL 的 cookie。
在浏览器中打开开发人员工具 > 转到“应用程序”选项卡并 > 删除与 URL 关联的 cookie。