@weart

Как победить 504, грузя большой файл на s3?

Привет всем. Имеется вот такая связка php + js:

PHP

// получаем объект
try {
	return new S3Client([
		'version' => 'latest',
		'endpoint' => 'https://storage.yandexcloud.net',
		'region' => 'ru-central1',
		'retries' => 3,
		'http' => [
			'connect_timeout' => 5,
			'timeout' => 10,
		],
		'credentials' => [
			'key' => '',
			'secret' => '',
		],
	]);
} catch (S3Exception $e) {
	$errorCode = $e->getAwsErrorCode();
	$errorMessage = $e->getAwsErrorMessage();
	error_log(print_r($errorCode, true));
	error_log(print_r($errorMessage, true));
	return false;
}

// в другом методе грузим файлы
$uploader = new MultipartUploader(self::$s3, $filePath, [
	'bucket' => '',
	'key' => '',
	'params' => [
		'@http' => [
			'progress' => function ($expectedDl, $dl, $expectedUl, $ul) {
				// log
			}
		]
	],
]);

try {
	$result = $uploader->upload();
	$fileUrl = $result['ObjectURL'];
} catch (MultipartUploadException $e) {
	$error = $e->getMessage();
}


JS:
const xhr = new XMLHttpRequest();
const formData = new FormData();
...
xhr.open('POST', 'url', true);
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.send(formData);


Сайт на wp, на файлах до 300-500mb все ок, а потом в консоль приходит 504.

Конфиг nginx:
client_max_body_size 1000M;
fastcgi_read_timeout 2000;

php тоже увеличены размеры, тайминги.

С js SDK таких проблем нет, но у нас довольная громоздкая логика проверки и обработки файлов перед сборкой zip, поэтому юзаю php SDK.

Пните плиз в правильном направлении.

PS лог

upstream timed out (60: Operation timed out) while reading response header from upstream
  • Вопрос задан
  • 163 просмотра
Решения вопроса 1
yesbro
@yesbro
Думаю, помогаю думать
Файлы загружаются на сервер одновременно (в одном запросе) или по очереди? Какая ошибка в логе/на странице? Это ошибка php или nginx? Может есть какой-то прокси/балансировщик перед nginx?
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@pantsarny
Создаешь задачу по загрузке файла с сервера на с3. И эту задачу выполняешь вне веб процесса
Ответ написан
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
у вас 504 ошибка, а не 413, следовательно дело не в client_max_body_size, а настройках php (upload_max_filesize/post_max_size)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы