Recibo 500 errores de servidor interno cuando intento hacer un HTTP POST a una dirección específica en mi aplicación. He examinado los registros del servidor en el directorio de registro personalizado especificado en el archivo de hosts virtuales, pero el error no aparece allí, por lo que depurarlo ha sido un dolor de cabeza.
¿Cómo hago para que Apache registre los errores internos 500 en el registro de errores?
apache
error-logging
wcolbert
fuente
fuente
Respuestas:
Tenga en cuenta: El póster original no preguntaba específicamente sobre PHP. Todas las respuestas centradas en php hacen grandes suposiciones que no son relevantes para la pregunta real.
El registro de errores predeterminado, a diferencia de los registros de errores de los scripts, generalmente tiene el error (más) específico. a menudo serán los permisos denegados o incluso un intérprete que no se puede encontrar.
Esto significa que la falla casi siempre recae en su script. Por ejemplo, ¿cargó un script en Perl pero no le dio permisos de ejecución? o tal vez se corrompió en un entorno Linux, si escribe el script en Windows y luego lo carga al servidor sin que se conviertan los finales de línea, obtendrá este error.
en perl si te olvidas
obtendrás este error
Hay muchas razones para ello. así que primero verifique su registro de errores y luego proporcione más información.
El registro de errores predeterminado suele estar en
/var/log/httpd/error_log
o/var/log/apache2/error.log
.La razón por la que consulta los registros de errores predeterminados (como se indicó anteriormente) es porque los errores no siempre se publican en el registro de errores personalizado como se define en el host virtual.
Asume linux y no necesariamente perl
fuente
grep PHP /var/log/syslog
. Probablemente porque teníaerror_log = syslog
dentro/etc/php5/apache2/php.ini
.¿Por qué los 500 errores internos del servidor no se registran en los registros de errores de Apache?
Los errores que causan el error 500 del servidor interno provienen de un módulo PHP. Por defecto, PHP NO registra estos errores. El motivo es que desea que las solicitudes web se realicen lo más rápido posible físicamente y es un peligro para la seguridad registrar errores en una pantalla donde los atacantes puedan observarlos.
Estas instrucciones para habilitar el registro de errores del servidor interno son para
Ubuntu 12.10
conPHP 5.3.10
yApache/2.2.22
.Asegúrese de que el registro de PHP esté activado:
Busque su archivo php.ini:
Edite ese archivo como root:
Encuentre esta línea en php.ini:
Cambie la línea de arriba a esto:
Más abajo en el archivo verá esto:
Los puntos y comas son comentarios, lo que significa que las líneas no tienen efecto. Cambie esas líneas para que se vean así:
Lo que esto le comunica a PHP es que queremos registrar todos estos errores. Advertencia, habrá un gran impacto en el rendimiento, por lo que no desea que esto esté habilitado en producción porque el registro requiere trabajo y el trabajo lleva tiempo, el tiempo cuesta dinero.
Reiniciar PHP y Apache debería aplicar el cambio.
Haga lo que hizo para causar el error 500 Internal Server nuevamente y verifique el registro:
Debería ver el error 500 al final, algo como esto:
fuente
display_errors
imprime errores en la pantalla .log_errors
escribe errores en el archivo de registro .Verifique su registro de errores de php, que podría ser un archivo separado de su registro de errores de apache.
Encuéntrelo yendo a
phpinfo()
y verifique el atributo error_log. Si no está configurado. Configúrelo: https://stackoverflow.com/a/12835262/445131Tal vez su post_max_size es demasiado pequeño para lo que está intentando publicar, o una de las otras configuraciones de memoria máxima es demasiado baja.
fuente
Me encontré con esto y se debió a una configuración incorrecta de mod_authnz_ldap en mi archivo .htaccess. No se registraba absolutamente nada, pero seguía recibiendo un error de 500.
Si se encuentra con este problema en particular, puede cambiar el nivel de registro de mod_authnz_ldap así:
Eso usará un nivel de registro de depuración para mod_authnz_ldap pero advertirá para todo lo demás ( https://httpd.apache.org/docs/2.4/en/mod/core.html#loglevel ).
fuente
Si la información de Error interno del servidor no aparece en los archivos de registro, probablemente deba reiniciar el servicio Apache .
Descubrí que Apache 2.4 (al menos en la plataforma Windows) tiende a negarse tercamente a vaciar los archivos de registro; en cambio, los datos registrados permanecen en la memoria durante bastante tiempo. Es una buena idea desde el punto de vista del rendimiento, pero puede resultar confuso durante el desarrollo.
fuente
Las respuestas de @ eric-leschinski son correctas.
Pero hay otro caso si la API de su servidor es FPM / FastCGI (predeterminado en Centos 8 o puede verificar usar la función phpinfo ())
En este caso:
phpinfo()
en un archivo php;Loaded Configuration File
param para ver dónde está el archivo de configuración para su PHP.Compruebe el
Server API
parámetro. Si su servidor solo usa apache handle API -> reinicie apache. Si su servidor usa php-fpm, debe reiniciar el servicio php-fpmVerifique el archivo de registro en la carpeta de registro php-fpm. p.ej
/var/log/php-fpm/www-error.log
fuente
En mi caso fue la directiva ErrorLog en httpd.conf. Lo noté accidentalmente después de que me di por vencido. Decidió compartir el descubrimiento) Ahora sé dónde encontrar los 500 errores.
fuente
Agregue
HttpProtocolOptions Unsafe
a su archivo de configuración de apache y reinicie el servidor apache. Muestra los detalles del error.fuente
Verifique que la versión de php que está ejecutando coincida con su código base. Por ejemplo, su entorno local puede estar ejecutando php 5.4 (y las cosas van bien) y tal vez esté probando su código en una nueva máquina que tenga php 5.3 instalado. Si está utilizando una sintaxis 5.4 como [] para array (), obtendrá la situación que describió anteriormente.
fuente
Intente acceder a un archivo estático. Si esto tampoco funciona, vaya a todos los directorios desde la raíz "/" o "c: \" al directorio de su archivo y compruebe si contienen archivos ".htaccess".
Una vez dejé un archivo en "c: \" y tuvo los resultados más extraños.
fuente
Compruebe si está deshabilitado el informe de errores en alguna parte de su código.
Había un lugar en mi código donde lo deshabilité, así que agregué el código de depuración después:
fuente