uwsgi无效的请求块大小

Kar*_*kde 122 uwsgi

我在皇帝模式下运行uwsgi

uwsgi --emperor /path/to/vassals/ --buffer-size=32768
Run Code Online (Sandbox Code Playgroud)

并得到这个错误

invalid request block size: 21327 (max 4096)...skip
Run Code Online (Sandbox Code Playgroud)

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

Pal*_*aty 186

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

  • 我只想对此发表评论:uwsgi有"http","http-socket"和"socket"选项.我想调用cgi python脚本; "插座"就是答案. (5认同)
  • 这不是正确的解决方案。如果我们要unix套接字怎么办? (2认同)
  • @Farsheed,我刚才描述了为什么OP会看到这个错误.如何解决它完全取决于你.根据您的需要,它可能是`socket =/tmp/myapp.sock`或`http = 0.0.0.0:8000`或其他任何东西. (2认同)

Far*_*eed 122

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

buffer-size=32768
Run Code Online (Sandbox Code Playgroud)

或者在命令行模式下:

-b 32768
Run Code Online (Sandbox Code Playgroud)

从官方文档引用:

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

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

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

  • 有时你_必须_使用http协议,因为unix套接字仅在本地计算机上可用。考虑这样一种情况,当你有很多机器并且在它们之上有一个单独的平衡器时 - 你必须在这里使用“http-socket”。 (2认同)
  • @Palasaty,无论如何,修复缓冲区大小都会解决问题! (2认同)

Pau*_*nna 14

我遇到了同样的问题,试图在nginx下运行它,并在这里关注文档.重要的是要注意,一旦切换到nginx,您必须确保您没有尝试访问--socket param指定的端口上的应用程序,而是访问nginx.conf中的"listen"端口.虽然您的问题描述不同,但标题与我遇到的问题完全匹配.


aja*_*rdo 14

我可以解决它添加--protocol = http到uwsgi

  • @HenryLynx,只需将 `protocol=http` 添加到您的 `.ini` 文件中 (3认同)
  • 如何在 uWSGI 设置 ini 文件中进行设置?我的配置适用于您的建议,但仅适用于命令行。 (2认同)

And*_*rei 7

当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
Run Code Online (Sandbox Code Playgroud)

uwsgi_proxy如果您需要通过Web浏览器等访问应用程序,则还有一个简单的反向代理服务器。请参阅更多扩展的答案/sf/answers/2302546431/


Dem*_*tri 6

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

\n\n
\n

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

\n
\n\n

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

\n\n
proxy_pass http://unix:/path/to/socket.sock\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
uwsgi_pass unix:/path/to/socket.sock;\n
Run Code Online (Sandbox Code Playgroud)\n