104:通过peer重置连接:nginx + rainbows +超过1 MB上传

我正在运行ThreadPool rainbows + nginx(unix socket)

在大file upload时,我在nginx错误日志(应用程序日志中没有任何内容)中获得以下内容:

readv() failed (104: Connection reset by peer) while reading upstream 

浏览器收到回应:

 413 Request Entity Too Large 

为什么会发生?

  • “client_max_body_size 80M” 在http和服务器级别(以防万一)在nginx中设置
  • nginx通过unix套接字(上游socket + location @ proxy_pass)与rainbows进行通信
  • 我没有看到其他日志中的任何内容。 我检查过:
    • 彩虹日志
    • 工头日志
    • 应用程序日志
    • dmesg和/ var / log / messages
  • 上传一个大于1 MB大小的文件时会发生这种情况

ECONNRESET (Connection by peer)错误意味着连接被后端应用程序不完全关闭。 这通常发生在后端应用程序死亡的情况下,例如由于分段错误或由OOM杀手所杀。 要找出确切的原因,您必须检查您的后端日志(如果有)和/或系统日志。

也许你已经把client_max_body_size设置到了你的nginx.conf ,它将body的大小限制为1Mb,例如

 client_max_body_size 1M; 

在这种情况下,您需要将其删除,以允许上传1M以上的文件。

结果Rainbows有一个名为client_max_body_size的配置选项,默认为1 MB 此处记录该选项

如果这个选项是开启的,Rainbows会默默地向413请求大量的请求。 除非你在它前面运行一些东西,否则你可能不知道它已经破裂了。

 Rainbows! do # let nginx handle max body size client_max_body_size nil end