• Nginx + php-fpm выполнение долгих скриптов

 #10375   IgorA100
 06 май 2021, 18:25
Максимальное время которое nginx ждет ответ от бэкэнда - 75 секунд. Причем это захардкожено в коде самого nginx. Это предельная величина директивы конфига fastcgi_read_timeout (которая по умолчанию как раз 60 секунд). Нужно более долгое время - сбрасывайте буфера на бэкэнде не реже этого времени. Например так:
Код: Выделить всё// отправляем данные nginx-у что бы не выйти за fastcgi_read_timeout
$output_buffer = ob_get_length();
if ( !empty($output_buffer) ) {
    flush();
    ob_flush();
}


Если нужно, чтобы скрипт просто отработал, и не нужно получать резутат в браузере, то можно установить ignore_user_abort(true) (php.net/manual/ru/function.ignore-user-abort.php), чтобы скрипт доработал после того, как nginx перестает ждать ответа, или же прервать ожидание самому, с помощью fastcgi_finish_request() (php.net/manual/ru/function.fastcgi-finish-request.php) и после этого доделать всё, что надо.