У меня есть PHP-процесс, который пользователь запускает в браузере, но обычно занимает довольно много времени - более 5 минут. Мы только что переключились на новый сервер, и когда мы пытаемся запустить скрипт сейчас, он постоянно выходит из строя ровно через 4 минуты, отправляя на страницу 500 Internal Server Error и выводя следующие ошибки в журнал ошибок:
Тайм-аут ожидания вывода из сценария CGI
Преждевременное завершение заголовков скрипта: cgi_wrapper
Интересно то, что процесс PHP, похоже, завершается в фоновом режиме. Если мы выйдем со страницы ошибки 500 и немного подождем, желаемые изменения в скрипте все же будут внесены.
Есть ли способ снять этот предел CGI, который, кажется, был наложен на нас? Я читал о FastCGI, но не знаю, как установить его на нашем сервере (Apache, CentOS, PHP 5.3).
Это не способ решить проблему - HTTP не предназначен для обработки операций, занимающих очень много времени - хотя похоже, что ваша текущая конфигурация PHP позволяет программе работать в течение длительного времени, это означает, что вы неправильно ее настроили - это должен знать, когда веб-сервер разрывает соединение, и отвечать соответствующим образом. Возможно, удастся подделать конфигурацию веб-сервера и даже заставить браузер оставаться на связи достаточно долго, и, возможно, вам не нужно беспокоиться о промежуточных прокси-серверах - но вы используете каждый из инструментов так, как они не были предназначены для использования.
Правильный способ решить проблему - запустить ее с веб-страницы, но запуск - это отдельная группа процессов и добавить код в длительный процесс, чтобы записать где-нибудь статус, который затем может быть опрошен скриптом, запускаемым из браузера.