Rud*_*ger 11 php apache file-upload
我有一个带有php后端的表单中的多部分文件上传.我已经设置max_execution_time并max_input_time在php.ini 180和文件上传证实,这些值设置,并设置TimeOut了Apache 180.我也定了
RewriteRule .* - [E=noabort:1]
RewriteRule .* - [E=noconntimeout:1]
Run Code Online (Sandbox Code Playgroud)
当我在快速连接上传250MB文件时,它工作正常.当我使用较慢的连接或网络链接调节器来人为减慢它时,同一文件超时并且Chrome net::ERR_CONNECTION_RESET在1分钟(和5秒)后可靠地给我.我也尝试过其他具有相同结果的浏览器,只是不同的错误消息.
没有任何迹象表明一个错误在任何日志和我都在尝试http和https.
什么会导致上传连接在1分钟后重置?
编辑
我现在也尝试过一个简单的上传表格,绕过我正在使用的任何框架,还有1分钟的超时.
我还制作了一个睡眠脚本,在2分半钟后超时,并且可以正常工作,页面需要大约2.5分钟才能加载,所以我无法看到它的浏览器或标题是如何相关的.
我还使用了具有更多RAM的服务器来确保它与此无关.我已经在3个不同规格的不同服务器上进行了测试,但都来自同一个CentOS 7基础.
我现在也升级到PHP 7.2并再次更新相关字段,但问题没有变化.
编辑2 此孤立实例的技术堆栈是
我的技术堆栈中的其他所有内容都已从此测试区域中删除,以尝试隔离问题.EFS在系统上,但在我最孤立的测试中,它只是使用EBS.
编辑3 这里有一些来自chrome网络调试器的日志:
{"params":{"net_error":-101,"os_error":32},"phase":0,"source": {"id":274043,"type":8},"time":"3332701830","type":69},
{"params": {"error_lib":33,"error_reason":101,"file":"../../net/socket/socket_bio_adapter.cc","line":216,"net_error":-101,"ssl_error":1},"phase":0,"source": {"id":274043,"type":8},"time":"3332701830","type":56},
{"phase":2,"source":{"id":274038,"type":1},"time":"3332701830","type":159},
{"phase":1,"source": {"id":274038,"type":1},"time":"3332701830","type":164},
{"phase":1,"source": {"id":274038,"type":1},"time":"3332701830","type":287},
{"params": {"error_lib":33,"error_reason":101,"file":"../../net/socket/socket_bio_adapter.cc","line":113,"net_error":-101,"ssl_error":1},"phase":0,"source": {"id":274043,"type":8},"time":"3332701830","type":55},
{"params":{"net_error":-101},"phase":2,"source": {"id":274038,"type":1},"time":"3332701830","type":287},
{"params":{"net_error":-101},"phase":2,"source":{"id":274038,"type":1},"time":"3332701830","type":164},
{"params":{"net_error":-101},"phase":2,"source":{"id":274038,"type":1},"time":"3332701830","type":97},
{"phase":1,"source":{"id":274038,"type":1},"time":"3332701830","type":105},
{"phase":2,"source":{"id":274038,"type":1},"time":"3332701830","type":105},
{"phase":2,"source":{"id":274043,"type":8},"time":"3332701830","type":38},
{"phase":2,"source":{"id":274043,"type":8},"time":"3332701830","type":38},
{"phase":2,"source":{"id":274043,"type":8},"time":"3332701830","type":34},
{"params":{"net_error":-101},"phase":2,"source":{"id":274038,"type":1},"time":"3332701830","type":2},
Run Code Online (Sandbox Code Playgroud)
原始来源在这里
ERR_CONNECTION_RESET通常意味着与服务器的连接已经停止,而没有向客户端发送任何响应。这意味着整个 PHP 进程已经死亡,无法正常关闭。
这通常不是由exceeded memory_limit. 它可能是某种分段错误或类似的东西。如果您有权访问错误日志,请检查它们。否则,您可能会从托管公司获得支持。
我建议您尝试以下一些方法:
尝试清理浏览器的缓存。如果您已经访问过该页面,则缓存可能包含与网站当前版本不匹配的信息,从而阻止连接设置,从而出现ERR_CONNECTION_RESET消息。
将以下内容添加到您的设置中:
内存限制 = 1024M
max_input_vars = 2000
upload_max_filesize = 300M
post_max_size = 300M
最大执行时间 = 990
尝试在表单中设置以下输入:
在您的处理脚本中,增加会话超时:
设置时间限制(200);
您可能需要在 apache 配置文件中调整SSL 缓冲区大小。
SSLRenegBufferSize 10486000
conf 文件的名称和位置因发行版而异。
在 Debian 中,您可以在其中找到 conf 文件 /etc/apache2/sites-available/default-ssl.conf
有几次它会mod_security module阻止发布大约 171 KB 的大数据。尝试在 mod_security.conf 中添加/修改以下内容
SecRequestBodyNoFilesLimit 10486000 SecRequestBodyInMemoryLimit 10486000
我希望有些事情可以解决!
我遇到了类似的问题,在我的情况下,它通过添加以下内容与mod_reqtimeout有关:
RequestReadTimeout header=20-40, MinRate=500 body=20, MinRate=500
Run Code Online (Sandbox Code Playgroud)
到httpd.conf做到了!您可以在此处查看文档。
希望能帮助到你!