Php 大文件的cURL SSL错误

Php 大文件的cURL SSL错误,php,ssl,curl,http2,fpm,Php,Ssl,Curl,Http2,Fpm,我正在尝试对我的生产服务器进行一些备份,并在另一台服务器上发送tar.gz中压缩的备份。在将我的服务器更新为php7.2-fpm(适用于HTTP2.0)之前,这工作正常 我得到这个错误: Fatal error: Uncaught Exception: SSL read: error:00000000:lib(0):func(0):reason(0), errno 104 以下是我的两台服务器的配置: -生产服务器: -系统:Linux debian2 4.9.0-6-amd64#1 SMP

我正在尝试对我的生产服务器进行一些备份,并在另一台服务器上发送tar.gz中压缩的备份。在将我的服务器更新为php7.2-fpm(适用于HTTP2.0)之前,这工作正常

我得到这个错误:

Fatal error: Uncaught Exception: SSL read: error:00000000:lib(0):func(0):reason(0), errno 104
以下是我的两台服务器的配置:

-生产服务器:
-系统:Linux debian2 4.9.0-6-amd64#1 SMP Debian 4.9.88-1+deb9u1(2018-05-07)x86_64
-Apache:Apache/2.4.33
-Php:Php版本7.2.5-1(带FPM api)

-备份服务器:
-系统:Linux Debian 2 3.16.0-4-amd64#1 SMP Debian 3.16.51-3(2017-12-13)x86_64
-Apache:Apache/2.4.10
-Php:Php版本7.1.13-1(带有Apache 2.0处理程序)

备份服务器仍然使用HTTP1,生产服务器使用HTTP2协议

因此,为了进行备份,我转到根文件夹,将其中的所有内容压缩为.tar.gz

要发送文件,请使用以下代码:

/**
 * @brief Sends a file.
 * @param      Array          $data    The data to send (backup file path, file name)
 * @param      String|string  $action  The action (platformBackup, databaseBackup)
 * @return     Array|boolean
 */
public static function sendFile(Array $data, String $action) : Array
{
    $cFile = curl_file_create($data['file']);
    $data['save'] = $cFile;

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,SERVER_SAVE_URL.'/'.SERVER_SAVE_TOKEN.'/' . $action . '/'.PLATEFORM_ID);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_HTTPHEADER,array('Content-Type: multipart/form-data'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($ch);

    if ($result === false)
    {
        throw new Exception(curl_error($ch), curl_errno($ch));
    }

    $result = json_decode($result, true);
    return $result;
}
这适用于小文件(小于1Gb)。但大一点的就不行了

我的第一个想法是Apache和php7.2-fpm的配置不好,因为以前一切都很好

但我认为这没关系,以下是我在php/7.2/fpm/php.ini中更改的变量:

max_execution_time = 10800 
memory_limit = 1024M
post_max_size = 10000M
upload_max_filesize = 10000M
我还试图在php/7.2/fpm/pool.d/www.conf中强制它们,但没有任何更改

提前感谢您的帮助

编辑:

我将备份服务器更新为Apache 2.4.33,并使用php7.2-fpm启用HTTP2.0协议。当我尝试备份时,我在错误日志中收到一条消息:

[Tue Jun 12 13:10:34.829260 2018] [proxy_fcgi:error] [pid 9092:tid 140388941666048] (70008)Partial results are valid but processing is incomplete: [client XXX.XXX.XXX.XXX:XXX] AH01075: Error dispatching request to : (reading input brigade)
从我得到的php7.1-fpm服务器

503 Service Unavailable
从php7.2-fpm我得到:

Fatal error: Uncaught Exception: SSL read:error:00000000:lib(0):func(0):reason(0), errno 104
由于php和apache都不起作用,我告诉自己这个问题来自其他地方,我观察了我的文件系统,它是ext4,所以大文件没有问题,我尝试用SCP发送一个备份,这也很有效。所以对我来说,问题只来自PHP、Apache或cURL

作为提醒,备份适用于小型服务器(800mb),但不适用于大型服务器(3.4Gb)

编辑1:


似乎SSL是个问题,当我在备份服务器上禁用它时,一切都正常。作为临时解决方案,我只需使用生成的密钥用openssl加密文件并将其发送到备份服务器。

编辑:在以下其他主题中:

本文解释了如何在apache配置中提高SSL缓冲区大小(这可能是您的问题)

-tls1_2
更改为
tls1
tls1_1
ssl3
,以测试其他密码套件

以上内容将模拟SSL握手和传输,如果一切正常,则应以退出代码0结束

要在bash读取退出代码,只需在执行上一个命令后执行
echo$?

然后,nmap扫描将列出服务器上可用的所有SSL密码,请注意,这是一种侵入性测试,可能会触发安全软件,导致请求者的IP被禁止。除非您确定自己在做什么,否则不要使用第二个测试:

nmap --script ssl-enum-ciphers ${DoMain}
希望这有帮助

然后,根据PHP libcurl声明中设置的结果:

curl_setopt($ch, CURLOPT_SSLVERSION, $int);
其中,
$int
表示要使用的SSL密码套件:

  • 卷曲度默认值(0)
  • 卷曲度1(1)
  • 卷曲度(2)
  • 卷曲度3(3)
  • 卷曲度
  • 卷曲度
  • 卷曲度卷曲度卷曲度卷曲度卷曲度卷曲度卷曲度卷曲度卷曲度卷曲度卷曲度卷曲度卷曲度卷曲度卷曲度卷曲度卷曲度卷曲度卷曲度卷曲度卷曲度
文件:


@stackOverflow管理员:很抱歉,我想发表评论,但没有足够的分数。请编辑或复制/粘贴,然后删除我的答案,并在需要时将其放在注释中。

当您使用
phpinfo()
转储配置时,是否看到相同的参数?这不是SSL错误(SSL错误为0),但对等方已关闭连接(errno 104由对等方重置连接)。因此,不要查看SSL级别的问题。查看目标服务器错误日志,了解可能导致服务器关闭连接的原因的详细信息。@Flyzzx我刚刚检查了两台服务器的phpinfo(),所有内容都是正确的,符合我的要求。@SteffenUllrich我只是查看apache错误日志,当我尝试备份服务器时,文件中没有任何内容。没有错误。是否还有其他apache日志,而不是我在虚拟主机中配置的日志?@HugoPierrat:我不知道您的配置,但我认为日志消息应该在您配置的错误日志(而不是访问日志)中。如果您在VirtualHost上配置了错误日志或全局错误日志,我对此一无所知。相关问题:,我不明白为什么这会改变任何事情,我可以发送一个800mb的文件,没有任何问题,默认情况下,
SSLRenegBufferSize
设置为128MB。我在cURL请求上尝试了每个SSL版本,但没有任何变化。目前我无法尝试你的解决方案,但我会把它记在心里,当我有时间的时候,我会尝试并告诉你!谢谢你的帮助!
nmap --script ssl-enum-ciphers ${DoMain}
curl_setopt($ch, CURLOPT_SSLVERSION, $int);