net :: ERR_CONNECTION_RESET当大文件花费超过一分钟时

Rud*_*ger 11 php apache file-upload

我有一个带有php后端的表单中的多部分文件上传.我已经设置max_execution_timemax_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秒)后可靠地给我.我也尝试过其他具有相同结果的浏览器,只是不同的错误消息.

没有任何迹象表明一个错误在任何日志和我都在尝试httphttps.

什么会导致上传连接在1分钟后重置?

编辑

我现在也尝试过一个简单的上传表格,绕过我正在使用的任何框架,还有1分钟的超时.

我还制作了一个睡眠脚本,在2分半钟后超时,并且可以正常工作,页面需要大约2.5分钟才能加载,所以我无法看到它的浏览器或标题是如何相关的.

我还使用了具有更多RAM的服务器来确保它与此无关.我已经在3个不同规格的不同服务器上进行了测试,但都来自同一个CentOS 7基础.

我现在也升级到PHP 7.2并再次更新相关字段,但问题没有变化.

编辑2 此孤立实例的技术堆栈是

  • Apache 2.4.6
  • PHP 5.6/7.2(两者都试过),有OPCache
  • Redis 3.2.6用于会话信息和键/值存储(ElastiCache)
  • PostgreSQL 10.2(RDS)

我的技术堆栈中的其他所有内容都已从此测试区域中删除,以尝试隔离问题.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)

Vik*_*dav 6

原始来源在这里

ERR_CONNECTION_RESET通常意味着与服务器的连接已经停止,而没有向客户端发送任何响应。这意味着整个 PHP 进程已经死亡,无法正常关闭。

这通常不是由exceeded memory_limit. 它可能是某种分段错误或类似的东西。如果您有权访问错误日志,请检查它们。否则,您可能会从托管公司获得支持。

我建议您尝试以下一些方法:

  1. 尝试清理浏览器的缓存。如果您已经访问过该页面,则缓存可能包含与网站当前版本不匹配的信息,从而阻止连接设置,从而出现ERR_CONNECTION_RESET消息。

  2. 将以下内容添加到您的设置中:

    内存限制 = 1024M

    max_input_vars = 2000

    upload_max_filesize = 300M

    post_max_size = 300M

    最大执行时间 = 990

  3. 尝试在表单中设置以下输入:

  4. 在您的处理脚本中,增加会话超时

    设置时间限制(200);

  5. 您可能需要在 apache 配置文件中调整SSL 缓冲区大小

    SSLRenegBufferSize 10486000

conf 文件的名称和位置因发行版而异。

在 Debian 中,您可以在其中找到 conf 文件 /etc/apache2/sites-available/default-ssl.conf

  1. 有几次它会mod_security module阻止发布大约 171 KB 的大数据。尝试在 mod_security.conf 中添加/修改以下内容

    SecRequestBodyNoFilesLimit 10486000 SecRequestBodyInMemoryLimit 10486000

我希望有些事情可以解决!


Rau*_*aul 5

我遇到了类似的问题,在我的情况下,它通过添加以下内容与mod_reqtimeout有关:

RequestReadTimeout header=20-40, MinRate=500 body=20, MinRate=500
Run Code Online (Sandbox Code Playgroud)

到httpd.conf做到了!您可以在此处查看文档。

希望能帮助到你!

  • 谢谢。您的解决方案对我有用,除了我必须删除“ =“ RequestReadTimeout标头= 20-40,MinRate = 500 body = 20,MinRate = 500之间的空格 (2认同)