У меня есть сайт в 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;
Модернизация или понижение до другой версии PHP может оставить остаточные параметры в httpd.conf. Проверьте текущую версию PHP, используя php -v в командной строке, и найдите любые строки, в которых упоминается другая версия в httpd.conf. Если вы их найдете, прокомментируйте, перетащите httpd.conf и перезапустите apache.
Директивы RLimitCPU и RLimitMEM в httpd.conf также могут нести ответственность за ошибку, если скрипт был убит из-за ограничения ресурса.
Проблема конфигурации в suEXEC, mod_perl или другом стороннем модуле может часто мешать выполнению сценариев и вызывать ошибку. Если это причина, в apache error_log будет обнаружена дополнительная информация, касающаяся специфики.
Если журнал suphp достигает 2 ГБ или больше, вы можете увидеть преждевременный конец ошибки заголовков скриптов. Посмотрите, что содержит журнал, и либо gzip, либо null. Перезапустите apache, а затем обработайте все проблемы, которые обнаружил журнал suphp. Журнал suphp находится по адресу: / usr / local / apache / logs / suphp_log
Разрешения этого сценария также могут вызывать эту ошибку. 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, и он работает