Я пытаюсь сделать резервную копию моего рабочего сервера и отправить резервную копию в 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 (с API FPM)
- Сервер резервного копирования: - Система: Linux debian2 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;
}
Работает с небольшим файлом (менее 1 ГБ).Но не с большим.
Моей первой мыслью была плохая конфигурация 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 и включаю протокол HTTP2.0 с php7.2-fpm.Когда я пытаюсь сделать резервную копию, я получаю сообщение в своем журнале ошибок:
[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.
Напоминаем, что резервное копирование работает для небольшого сервера (800 МБ), но не для большего (3,4 ГБ)
РЕДАКТИРОВАТЬ 1: Кажется, проблема в SSL, когда я отключаю его на своем сервере резервного копирования, все работает.В качестве временного решения я просто зашифровал файл с помощью openssl сгенерированным ключом и отправил его на мой резервный сервер.