Apache 在大文件上传时重置连接(?)

Pez*_*Pez 5 php apache mod-php

我有一个网站曾经能够上传大文件(大文件 > 10 或 20mb),但现在不能了。此时我已经调试了几个小时。

所有 php 值都设置得高得离谱:

post_max_size = 512M
upload_max_filesize = 512M
memory_limit = 1024M
max_execution_time = 600
max_input_time = 600
Run Code Online (Sandbox Code Playgroud)

我也在TimeOut 600httpd.conf中进行了设置。

本质上,如果我将一个大文件添加到上传字段,它永远不会上传。我可以看到 Chrome 左下角的“正在上传(1%)...”显示文件开始上传。它会向上计数,有时甚至达到 100%,然后从 0 重新开始计数,最终失败并显示 ERR_CONNECTION_RESET 消息。

最终的故障似乎是在随机的时间后发生的,有时是 24 秒,有时是 3 分钟。

我尝试了一个 170mb 的文件,在重新启动之前它总是会达到 16%17%。这总是需要 22 秒左右的时间。然后,它将从 0 处重新启动,并再次计数到 16 或 17%,然后再次重新启动。有时在重新启动一次后,有时在重新启动 4 或 5 次后,它最终会失败并显示 ERR_CONNECTION_RESET 消息。

我还尝试了 30mb 的文件。在重新启动之前,这个值始终会达到 100% 左右。

df -h 显示剩余的文件空间充足,我能够通过 SFTP 上传文件,确认确实有足够的硬盘空间。

文件也可以在我的开发服务器上使用完全相同的应用程序正常上传,因此我可以排除任何应用程序问题。

较小的文件也可以在生产服务器上正常上传,我尝试过 3 或 5mb 大的文件,没有任何问题。

我能够执行如下代码:

echo "start";
sleep(60);
echo "stop";
Run Code Online (Sandbox Code Playgroud)

生产过程中不会出现任何问题,因此不会超时所有请求,只会超时。

我尝试了多个浏览器,并且这是从多个客户端位置发生的。

我在 /var/log/httpd 中找到的任何日志中都没有错误。

我没有运行 mod security。我的应用程序中的任何地方都没有覆盖任何 php 设置。这是 apache 和 php 的相当标准的安装。

生产服务器是运行 Apache/2.4.39 的 Amazon Linux,我在 php 7.1 和 php 7.2 上尝试过,并得到了相同的结果,两者都使用 mod_php。

我已经进入了本期的“撞墙”阶段。有谁知道我可以做什么来调试这个?

Pez*_*Pez 3

终于让这个工作了。当大文件需要超过一分钟时,感谢net::ERR_CONNECTION_RESET

我必须将 RequestReadTimeout header=0 body=0 添加到我的 httpd.conf 文件中

它不可能在虚拟主机定义内,至少我几个小时前尝试过,但什么也没发生。但是,转回来并在 httpd.conf 中再次尝试,它成功了。

TG。