Подтвердить что ты не робот

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

Любые идеи?

4b9b3361

Ответ 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 и он работает