500 Ошибка сервера: преждевременное завершение заголовков сценария: - PullRequest
22 голосов
/ 02 декабря 2010

У меня есть веб-сайт на 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, который его возвращает.Я видел, как это происходило на других страницах сайта один или два раза, но это было во время индексации.

Есть идеи?

Ответы [ 8 ]

24 голосов
/ 02 декабря 2010

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

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

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

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

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

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

4 голосов
/ 31 августа 2013

В базе данных 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 ГБ или больше, вы можете увидеть ошибку преждевременного окончания заголовков скриптов. Посмотрите, что содержится в журнале, и либо разархивируйте его, либо обнулите. Перезапустите 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.

2 голосов
/ 14 августа 2014

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

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

1 голос
/ 20 февраля 2014

также может из-за неправильного использования PHP APC Extension. поэтому сначала удалите apc.so из php.ini, перезапустите apache и протестируйте его снова:)

0 голосов
/ 25 ноября 2014

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

0 голосов
/ 26 сентября 2014

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

0 голосов
/ 13 февраля 2014

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

header('Content-Type: text/html');
0 голосов
/ 02 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...