如果上传持续超过20秒,则将数据上传到Apache服务器仍然失败

时间:2019-05-08 15:41:54

标签: php ajax apache upload

我有一个网站,用户可以在其中将图像上传到托管的Apache / PHP服务器。 如果文件上传时间少于20秒,则一切正常。 但是,如果持续时间更长(无论图像文件大小是多少),上传都会失败。

在.htaccess中,我已经拥有:

php_value upload_max_filesize 10M
php_value post_max_size 70M
php_value max_execution_time 180
php_value max_input_time 180

在php脚本中,返回以下结果:

echo "-max_execution_time  ".ini_get('max_execution_time');
echo "-max_input_time ".ini_get('max_input_time');
echo "-upload_max_filesize  ".ini_get('upload_max_filesize');
echo "-post_max_size  ".ini_get('post_max_size');
echo "-memory_limit   ".ini_get('memory_limit');

除外:

-max_execution_time  180

-max_input_time 180

-upload_max_filesize  10M

-post_max_size  70M

-memory_limit   128M

这些是请求-全部在22秒后失败,错误为net :: ERR_SPDY_PROTOCOL_ERROR(在Firefox中,它们在20秒后失败)

https://cdn1.imggmi.com/uploads/2019/5/8/fadd31a1a22674cfc3cc4603c97762ff-full.jpg

console log

我在这里缺少什么??? 再一次,如果上传时间少于20秒-一切都很好...

5 个答案:

答案 0 :(得分:0)

也许此问题源于apache httpd.conf文件中的“超时”指令。

参见此处:https://httpd.apache.org/docs/2.4/mod/core.html#timeout

答案 1 :(得分:0)

20秒可能意味着Apache模块mod_reqtimeout可能会杀死您的请求,因为如果未配置选项,则这是它的默认值之一(接收请求正文需要20秒)。

https://httpd.apache.org/docs/trunk/mod/mod_reqtimeout.html

我相信mod_reqtimeout是Apache 2.4自动加载的扩展

答案 2 :(得分:0)

由于共享托管,这是服务器问题,我不得不联系托管支持...最终他们做了一些服务器重新配置,现在上传没有中断得这么早...感谢@ m908070 欢呼

答案 3 :(得分:0)

在apache2.4-rails-passenger-aws-ec2项目中,我也遇到了类似的问题。 当我上传大文件(超过500MB)时,它会在20秒后超时。

我试图更改apache的与Timeout相关的配置,但是并没有得到改善。

我将我的应用程序服务器从apache-passenger切换到thin,然后上传没有问题。 自从这个问题最近发布以来,我认为最近发布的apache就有问题。

毕竟,我在执行以下命令时将apache降级了,它工作正常。

$ sudo yum list httpd24
Installed packages
httpd24.x86_64  2.4.39-1.87.amzn1
$ sudo yum erase httpd24 httpd24-tools httpd24-devel
$ sudo yum install httpd24-2.4.38-1.86.amzn1 httpd24-2.4.38-1.86.amzn1 httpd24-devel-2.4.38-1.86.amzn1

在阅读完此问题的答案后,我将apache重新升级到2.4.39,并注释掉了以下行以禁用mod_reqtimeout,它也可以正常工作。

# LoadModule reqtimeout_module modules/mod_reqtimeout.so

我认为问题的原因在于Apache的版本从2.4.38更改为2.4.39。

答案 4 :(得分:0)

关闭该模块-其帮助

LoadModule reqtimeout_module modules / mod_reqtimeout.so