3

我有一个网站,以前可以上传大文件(大文件大于 10 或 20mb),但现在不能了。在这一点上,我已经调试了几个小时。

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

post_max_size = 512M
upload_max_filesize = 512M
memory_limit = 1024M
max_execution_time = 600
max_input_time = 600

我也在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";

生产没有任何问题,所以它不会超时所有请求,只有上传。

我尝试了多个浏览器,这发生在多个客户端位置。

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

我没有运行 mod security。在我的应用程序中,没有任何 php 设置被覆盖。这是一个非常标准的 apache 和 php 安装。

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

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

4

1 回答 1

2

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

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

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

TG。

于 2019-05-28T21:51:40.243 回答