500 Ошибка сервера: недопустимый конец заголовков script:
У меня есть сайт в php, который работает с сервером индексирования solr на основе CodeIgniter.
У нас появилось много нового контента, поэтому мы сбросили базу данных и должны были переиндексировать контент (около 168 000 элементов). Я создал script для индексации содержимого срезами 500 - когда заканчивается script, мы запускаем следующую индексацию.
Он отлично работает на моей локальной тестовой среде, но на производстве я получаю эту ошибку 500:
[Thu Dec 02 ...] [error] [client IP] Premature end of script headers: index.php
В моем php.log абсолютно ничего нет, просто apache error_log, который возвращает его. Я видел, как это происходило на других страницах веб-сайта один или два раза, но это было во время этой индексации.
Любые идеи?
Ответы
Ответ 1
Эта ошибка обычно (иногда) вызвана установкой FastCGI директивы FcgidIOTimeout
(старое имя: IPCCommTimeout
).
Это количество секунд для таймаута IO, по умолчанию - 40 секунд. Тайм-аут означает, что
"Приложение FastCGI должно начать генерировать ответ в течение этого периода времени. Увеличьте эту директиву, если необходимо, для обработки приложений, на которые требуется относительно длительный период времени для ответа".
Вы можете попытаться решить проблему, поставив это в свой vhost.conf:
<IfModule mod_fcgid.c>
# 5 minutes for IO timeout, default is 40 seconds
FcgidIOTimeout 300
</IfModule>
Вы можете увеличить его по мере необходимости, а затем восстановить исходное значение после завершения процесса переиндексации.
Ответ 2
Существует хороший список возможностей для Liquid Web KB;
-
Модернизация или понижение до другой версии PHP может оставить остаточные параметры в httpd.conf. Проверьте текущую версию PHP, используя php -v в командной строке, и найдите любые строки, в которых упоминается другая версия в httpd.conf. Если вы их найдете, прокомментируйте, отпустите httpd.conf и перезапустите apache.
-
Директивы RLimitCPU и RLimitMEM в httpd.conf также могут нести ответственность за ошибку, если из-за ограничения ресурса был убит script.
-
Проблема конфигурации в suEXEC, mod_perl или другом стороннем модуле может часто мешать выполнению сценариев и вызывать ошибку. Если это причина, в apache error_log будет найдена дополнительная информация, относящаяся к специфике.
-
Если файл suphps достигает размера 2 ГБ или больше, вы можете увидеть преждевременный конец ошибки заголовков скриптов. Посмотрите, что содержит журнал, и либо gzip, либо null. Перезапустите apache, а затем обработайте все проблемы, которые обнаружил журнал suphp. Журнал suphp находится по адресу:/usr/local/apache/logs/suphp_log
-
Разрешения script s также могут вызывать эту ошибку. CGI-скрипты могут иметь доступ только к ресурсам, разрешенным для пользователя и группы, указанным в httpd.conf. В этом случае ошибка может просто указывать на то, что неавторизованный пользователь пытается получить доступ к script.
http://www.liquidweb.com/kb/apache-error-premature-end-of-script-headers/
Если бы я был в той же ситуации, я бы сначала проверил разрешения, а затем продолжил с 3 и 4.
Ответ 3
его также может из-за неправильного использования расширения PHP APC.
поэтому сначала удалите apc.so из php.ini restart apache и снова проверьте его:)
Ответ 4
Я также получал это сообщение об ошибке в etc/httpd/logs/error_log после ошибки 500 внутреннего сервера, пытающейся загрузить веб-сайт.
Для меня решение было разрешением - было для файла chmod 755. Я создал файл как более высокий пользователь уровня доступа, чем тот, который "загружал" сайт на сервере.
Ответ 5
Какая у вас ошибка в php? Сообщение об ошибке, которое вы получаете там внутри журнала, часто является результатом простой PHP-ошибки, но сервер настроен так, чтобы не доставлять сообщения об ошибках клиенту по соображениям безопасности. Таким образом, сообщение не очень полезно, это может быть все.
Ответ 6
У меня была эта проблема, и после боев в течение более 5 часов я отключил xcache, и все вернулось к нормальной жизни, ошибка исчезла!
Ответ 7
u забыл добавить заголовок типа контента в ответе, который должен иметь http-заголовок при размещении на apache2
header('Content-Type: text/html');
Ответ 8
У меня была та же проблема, просто перезапустите сервер Apache и он работает