我有一个网站,以前可以上传大文件(大文件大于 10 或 20mb),但现在不能了。在这一点上,我已经调试了几个小时。
所有 php 值都设置得高得离谱:
post_max_size = 512M
upload_max_filesize = 512M
memory_limit = 1024M
max_execution_time = 600
max_input_time = 600
我也在TimeOut 600
httpd.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。
我已经进入了这个问题的“撞墙”阶段。有谁知道我可以做些什么来调试它?