it-swarm.com.ru

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

Есть идеи?

22
Stéphane Goetz

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

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

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

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

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

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

24
Fabrizio D'Ammassa

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

4
Tim

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

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

2
the.s.brom

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

1
Jacob Arlington

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

0
Youssef K. Yassin

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

0
Dr.Molle