【问题标题】:Apache 2.4 + PHP 7.2 prefork mpm + file uploads lead to partial upload errors after 20 secondsApache 2.4 + PHP 7.2 prefork mpm + 文件上传导致 20 秒后部分上传错误
【发布时间】:2019-08-31 08:21:33
【问题描述】:

我注意到一个 Web 应用程序存在问题,我们的应用程序处理文件上传的代码会间歇性地遇到文件上传错误 3。我不确定我们的用户是如何触发此错误的,但我知道这样做的人会通过不稳定或缓慢的互联网连接(移动热点、公共 wifi 等)上传文件。因此,我使用 Chrome 开发工具的节流功能(快速 3g)并上传了一个 10mb 的文件,这需要大约一分钟或更长时间才能完成。我们使用 Dropzonejs 库来处理上传,没有任何分块。恰好在 22 到 23 秒后,连接似乎总是中止,但 Apache 仍然继续处理它收到的不完整请求正文并将其传递给 PHP,从而导致部分上传错误。

我似乎无法弄清楚导致这种情况发生的原因。 PHP 配置将 max_execution_time 和 max_input_time 分别设置为 0 和 -1。发布和上传最大大小设置得相对较高,文件上传大小似乎并不重要。只要上传请求的时间超过 22 - 23 秒,就会出现问题。我尝试禁用 mod_reqtimeout 并没有什么不同。我尝试过的其他事情是修改 apache Timeout 值并禁用 keepalive,但它总是在 20 秒后给我一些问题(那个时间来自浏览器的网络选项卡)。

我在 apache 的错误日志中看不到任何内容,并且访问日志使这些请求看起来合法,因为 apache 仍然像往常一样继续处理不完整的请求。

我最初认为它可能是 dropzonejs 杀死了 ajax 请求连接,但我还在使用 laradock 的本地开发环境中测试了相同的代码(软件版本会略有不同。仍然是 apache 2.4 和 php 7.2),但我不能复制问题,所以它不可能是客户端问题。

【问题讨论】:

    标签: php apache file-upload


    【解决方案1】:

    看起来是 mod_reqtimeout 停止了我的发布请求。我认为当我最初尝试禁用它时,我的 apache 更改并没有完全传播(我猜是由于我使用优雅重启和启用 keepalive 的混合)。

    【讨论】:

      【解决方案2】:

      由于这个问题,我们遇到了同样的问题并解决了。 但是,无需完全禁用该模块。 问题是由 Apache 2.4.39 中的这个 bug 引起的:

      https://bz.apache.org/bugzilla/show_bug.cgi?id=63325

      按照错误报告中的建议,您可以在 Apache 配置文件中明确设置默认值。

      【讨论】:

      • 有趣。我们的服务器也有 2.4.39,所以这可能也是原因
      猜你喜欢
      • 1970-01-01
      • 2012-01-11
      • 2013-04-08
      • 2013-11-16
      • 2012-12-02
      • 2013-02-05
      • 2013-06-21
      • 2016-04-19
      • 2013-09-07
      相关资源
      最近更新 更多