【问题标题】:104: Connection reset by peer: nginx + rainbows + over 1 mb uploads104:对等方重置连接:nginx + rainbows + 超过 1 mb 的上传
【发布时间】:2012-10-18 22:21:49
【问题描述】:

我正在运行 ThreadPool rainbows + nginx(unix 套接字)

在上传大文件时,我在 nginx 错误日志中得到以下信息(应用程序日志中没有):

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

浏览器收到响应:

413 Request Entity Too Large

为什么会这样?

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

【问题讨论】:

    标签: ruby-on-rails nginx unicorn unix-socket rainbows


    【解决方案1】:

    ECONNRESET (Connection reset by peer) 错误表示连接被后端应用程序不干净地关闭。这通常发生在后端应用程序死机时,例如由于分段错误,或被OOM killer 杀死。要找出确切原因,您必须检查后端日志(如果有)和/或系统日志。

    【讨论】:

    • 通常dmesg 甚至dmesg | grep oom -i 会对此有所帮助。
    • 我在日志中看不到任何内容。我检查了:rainbows 日志(没有请求记录)、工头日志(没有)和应用程序日志(没有请求记录)。
    • 我可以 100% 的重现这个问题(总是在上传超过 1 MB 时)。
    • 是的。我检查了 dmesg 和 /var/log/messages。还有什么我可以看的吗?
    • proxy_intercept_errors 指令应该会有所帮助。
    【解决方案2】:

    也许您将client_max_body_size 设置到您的nginx.conf 中,将主体大小限制为1Mb,例如

    client_max_body_size 1M;
    

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

    【讨论】:

    • 现在您已经编辑了答案。以前它是问题,应该作为评论而不是答案发布。
    • 是的,我已经设置好了,但我使用的是小写的 m(设置为 80m)。这可能是个问题吗?将在今天晚些时候尝试使用大写
    【解决方案3】:

    原来 Rainbows 有一个名为 client_max_body_size 的配置选项,默认为 1 MB 选项是documented here

    如果启用此选项,Rainbows 会以静默方式 413 处理大型请求。除非你在它前面运行一些东西,否则你可能不知道它会坏掉。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-24
      • 2013-08-25
      • 2016-03-03
      • 2016-10-10
      • 2018-05-22
      • 2014-01-04
      • 2021-08-27
      • 2017-06-09
      相关资源
      最近更新 更多