Назад | Перейти на главную страницу

Отключить таймаут чтения FastCGI в Nginx?

Есть ли способ отключить таймаут чтения для FastCGI? (fastcgi_read_timeout)

Установка его в ноль не работает и вызывает немедленный тайм-аут.

Причина, по которой мне нужно обойти тайм-аут, заключается в том, как отчеты создаются системой, которую мы используем. Поскольку разветвление невозможно в PHP-FPM (pctnl_fork () отключено), обработка отчета выполняется сразу после отправки запроса. Это приводит к зависанию чтения до тех пор, пока обработка не будет завершена системой.

Похоже, ваш единственный вариант - установить fastcgi_read_timeout к действительно большому значению (например, 1 час или 1 день).

Как я подойду к решению проблемы:

  1. Когда пользователь отправляет запрос на создание отчета, используйте exec("php report.php") для запуска скрипта генерации отчета в режиме CLI. Разумеется, используйте некоторую идентифицирующую информацию в качестве лекарств.

  2. Загрузите страницу «Подождите» для пользователя, используя AJAX, чтобы проверить, выполнен ли отчет с помощью ps w. Найдите имя сценария и используемые аргументы.

  3. После этого перейдите на страницу отчета.

Таким образом, вы не позволяете пользователям использовать затор для обновления, если ожидание становится слишком длинным (фактически делая его еще дольше), а также информируете пользователя о том, что процесс все еще выполняется.