Во-первых, мое решение применимо только к веб-серверу Apache.
Я работаю над сценарием, предназначенным для использования в качестве сценария загрузки csv для отчета с очень очень большой базой данных, и я тоже столкнулся с этой проблемой. Я не использую php, но вместо этого мой скрипт написан на каком-то непонятном языке heitml; -)
Проблема тайм-аута запроса возникает в моем сценарии следующим образом:
[Wed Sep 19 20:29:01 2012] [warn] [client ::1] Timeout waiting for output from CGI script /var/www/cgi-bin/heitml
[Wed Sep 19 20:29:01 2012] [error] [client ::1] (70007)The timeout specified has expired: ap_content_length_filter: apr_bucket_read() failed
И единственное серьезное решение, к которому я могу сейчас приспособиться, - это использовать это официальное расширение конфигурации таймаута здесь: mod_reqtimeout . Это позволяет регулировать параметры тайм-аута, например:
Разрешить 10 секунд для получения запроса, включая заголовки, и 30 секунд для получения тела запроса:
RequestReadTimeout header=10 body=30
Подождите не менее 10 секунд, чтобы получить тело запроса. Если клиент отправляет данные, увеличьте время ожидания на 1 секунду для каждых 1000 полученных байтов без ограничения верхнего предела для времени ожидания (за исключением предела, косвенно заданного LimitRequestBody):
RequestReadTimeout body=10,MinRate=1000
Подождите не менее 10 секунд, чтобы получить запрос, включая заголовки. Если клиент отправляет данные, увеличьте время ожидания на 1 секунду для каждых 500 полученных байтов. Но не допускайте более 30 секунд для запроса, включая заголовки:
RequestReadTimeout header=10-30,MinRate=500
Обычно на сервере должны быть настроены таймауты заголовка и тела. Если для виртуальных хостов http и https используется общая конфигурация, тайм-ауты не следует устанавливать слишком низкими:
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
Еще предстоит выяснить, есть ли лучшее решение, предлагаемое Apache, которое не требует от меня использования этого модуля (при условии, что он не установлен по умолчанию - хотя он включен во все версии 2.2.15 и более поздние).