2010-12-02 9 views
22

Tengo un sitio web en php que funciona con un servidor de indexación de solr, basado en CodeIgniter.500 Error del servidor: final prematuro de los encabezados de script:

Obtuvimos un montón de contenido nuevo, por lo que limpiamos la base de datos y tuvimos que reindexar el contenido (alrededor de 168,000 elementos). Creé un script para indexar los contenidos por secciones de 500: cuando termina el script, lanzamos la siguiente indexación.

Funciona perfectamente en mi entorno de prueba local, sino en la producción me sale este error 500:

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

No hay absolutamente nada en mi php.log, sólo el error_log de Apache que lo devuelve. Lo he visto suceder en otras páginas del sitio web una o dos veces, pero fue durante esta indexación.

¿Alguna idea?

+1

No hay suficiente información para contar. Si funciona en su entorno de prueba, sospecho que tiene permisos de archivos: ¿es posible que el servidor apache se ejecute como un usuario diferente? –

+0

Por lo tanto, permita que el script escriba en la información de registro después de cada varias líneas para que sepa dónde se rompe exactamente. –

+0

Colin Fine: no creo que provenga del usuario, ejecuto php con suphp, cada servidor está compartimentado WhatIsOpenID: no, no hay 500 errores diferentes, es apache que devuelve un código de "error de servidor interno 500" –

Respuesta

0

¿Cuál es tu error_level en php? El mensaje de error que recibe dentro del registro es a menudo el resultado de un simple error de PHP, pero el servidor está configurado para no entregar mensajes de error al cliente por razones de seguridad. Por esto, el mensaje no es muy útil, podría ser todo.

+0

El nivel de error se establece en display_errors en y arrojar todos los errores, de forma complementaria a esto tengo un sistema de registro que realiza una depuración de errores completa en cualquier error y lo almacena en la base de datos. entonces no hay nada de este lado –

24

Este error suele ser (a veces) causado por la configuración de FastCGI FcgidIOTimeout directive (antiguo nombre: IPCCommTimeout).

Ese es el número de segundos para el tiempo de espera de IO, el valor predeterminado es de 40 segundos. Tiempo de espera significa que

"The FastCGI application must begin generating the response within this period of time. Increase this directive as necessary to handle applications which take a relatively long period of time to respond."

se puede tratar de resolverlo poniendo esto en su vhost.conf:

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

se puede aumentar a medida que necesita y luego restaurar el valor original una vez que el proceso de indexación es completa .

+0

No estoy completamente familiarizado con la configuración de Apache y todas estas cosas. ¿se considera suphp como fastCGI? ¿se aplican las mismas reglas? Si es así, probaré su solución, porque creo que también es un problema de tiempo de espera –

+0

Nunca he usado suphp. De todos modos, puedes probar con un simple script php que duerme por más de 100 segundos, por ejemplo. Si obtiene el mismo error, entonces puede probar mi solución. –

4

Hay una buena lista sobre las posibilidades en la KB de Liquid Web;

  1. Upgrading or downgrading to a different version of PHP can leave residual options in the httpd.conf. Check the current version of PHP using php -v on the command line and search for any lines mentioning another version in the httpd.conf. If you find them, comment them out, distill the httpd.conf and restart apache.

  2. The RLimitCPU and RLimitMEM directives in the httpd.conf may also be responsible for the error if a script was killed due to a resource limit.

  3. A configuration problem in suEXEC, mod_perl, or another third party module can often interfere with the execution of scripts and cause the error. If these are the cause, additional information relating to specifics will be found in the apache error_log.

  4. If suphp’s log reaches 2GB in size or larger you may see the premature end of scripts headers error. See what the log contains and either gzip it or null it. Restart apache and then deal with any issues that the suphp log brought to light. The suphp log is located at: /usr/local/apache/logs/suphp_log

  5. The script’s permissions may also cause this error. CGI scripts can only access resources allowed for the User and Group specified in the httpd.conf. In this case, the error may simply be pointing out that an unauthorized user is attempting to access a script.

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

Si estuviera en la misma situación, me gustaría comprobar los permisos primero y luego continúan con 3 y 4.

-3

u olvidó añadir encabezado de tipo de contenido en la respuesta de los cuales es una cabecera HTTP debe tener cuando se aloja en apache2

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

falso: ejecute este script '' y obtendrá una página en blanco sin dicho mensaje de error. –

1

su también puede debido a el uso de PHP APC extensión de una manera incorrecta. así que primero elimine apc.so de php.ini restart apache y pruébelo nuevamente :)

2

También recibí este mensaje de error en etc/httpd/logs/error_log después de un error interno del servidor 500 que intenta cargar un sitio web.

Para mí, la solución era permisos - tenía que chmod 755 el archivo. Creé el archivo como un usuario de nivel de acceso más alto que el que estaba "cargando" el sitio en el servidor.

0

Tuve este problema y después de luchar durante más de 5 horas, deshabilité xcache y todo volvió a la normalidad, ¡desapareció el error!

-5

Tuve el mismo problema, simplemente reinicie el servidor apache y funciona

Cuestiones relacionadas