500 Ошибка сервера: преждевременный конец заголовков сценариев:

У меня есть сайт в php, который работает с сервером индексации solr, основанный на CodeIgniter.

У нас появилось много нового контента, поэтому мы сбросили базу данных и переиндексировали контент (около 168 000 элементов). Я создал скрипт для индексации содержимого на кусочки 500 – когда скрипт заканчивается, мы запускаем следующую индексацию.

Он отлично работает на моей локальной тестовой среде, но на производстве я получаю эту ошибку 500:

[Thu Dec 02 ...] [error] [client IP] Premature end of script headers: index.php 

В моем php.log абсолютно ничего нет, просто apache error_log, который возвращает его. Я видел, как это происходило на других страницах веб-сайта один или два раза, но это было во время этой индексации.

Есть идеи?

Эта ошибка обычно (иногда) вызвана установкой FastCGI директивы FcgidIOTimeout (старое имя: IPCCommTimeout ).

Это количество секунд для таймаута IO, по умолчанию 40 секунд. Тайм-аут означает, что

«Приложение FastCGI должно начать генерировать ответ в течение этого периода времени. При необходимости увеличивайте эту директиву, чтобы обрабатывать приложения, на которые требуется относительно длительный период времени».

Вы можете попытаться решить проблему, поместив это в свой vhost.conf:

 <IfModule mod_fcgid.c> # 5 minutes for IO timeout, default is 40 seconds FcgidIOTimeout 300 </IfModule> 

Вы можете увеличить его по мере необходимости, а затем восстановить исходное значение после завершения процесса переиндексации.

Существует хороший список возможностей для KB в Liquid Web;

  1. Модернизация или понижение до другой версии PHP может оставить остаточные параметры в httpd.conf. Проверьте текущую версию PHP, используя php -v в командной строке, и найдите любые строки, в которых упоминается другая версия в httpd.conf. Если вы их найдете, прокомментируйте, перетащите httpd.conf и перезапустите apache.

  2. Директивы RLimitCPU и RLimitMEM в httpd.conf также могут нести ответственность за ошибку, если скрипт был убит из-за ограничения ресурса.

  3. Проблема конфигурации в suEXEC, mod_perl или другом стороннем модуле может часто мешать выполнению сценариев и вызывать ошибку. Если это причина, в apache error_log будет обнаружена дополнительная информация, касающаяся специфики.

  4. Если журнал suphp достигает 2 ГБ или больше, вы можете увидеть преждевременный конец ошибки заголовков скриптов. Посмотрите, что содержит журнал, и либо gzip, либо null. Перезапустите apache, а затем обработайте все проблемы, которые обнаружил журнал suphp. Журнал suphp находится по адресу: / usr / local / apache / logs / suphp_log

  5. Разрешения этого сценария также могут вызывать эту ошибку. CGI-скрипты могут иметь доступ только к ресурсам, разрешенным для пользователя и группы, указанным в httpd.conf. В этом случае ошибка может просто указывать на то, что неавторизованный пользователь пытается получить доступ к скрипту.

http://www.liquidweb.com/kb/apache-error-premature-end-of-script-headers/

Если бы я был в той же ситуации, я бы сначала проверял права, затем продолжал 3 и 4.

его также может быть из-за неправильного использования расширения PHP APC. поэтому сначала удалите apc.so из php.ini restart apache и снова проверьте его 🙂

Я также получал это сообщение об ошибке в etc / httpd / logs / error_log после ошибки 500 Internal server, пытающейся загрузить веб-сайт.

Для меня решение было разрешением – было для файла chmod 755. Я создал файл как пользователь более высокого уровня доступа, чем тот, который «загружал» сайт на сервере.

Какая у вас ошибка в php? Сообщение об ошибке, которое вы получаете там внутри журнала, часто является результатом простой PHP-ошибки, но сервер настроен так, чтобы не доставлять сообщения об ошибках клиенту по соображениям безопасности. Таким образом, сообщение не очень полезно, это может быть все.

У меня была эта проблема, и после битвы в течение более 5 часов я отключил xcache, и все вернулось к нормальной жизни, ошибка исчезла!

u забыл добавить заголовок типа контента в ответе, который должен иметь http-заголовок при размещении на apache2

 header('Content-Type: text/html'); 

У меня была такая же проблема, просто перезапустите сервер Apache, и он работает