Causas posibles

  • 01. Problema
  • 02. Causas posibles
  • 03. Cómo comprobarlo
  • 04. Soluciones
  • 05. Prevención
  • Un error de sintaxis o de ejecución en el código de la aplicación (PHP, Python, Node, etc.).
  • Permisos incorrectos que impiden al servidor ejecutar un script.
  • Un archivo .htaccess con una directiva no soportada o mal escrita.
  • Se ha agotado un límite (memoria, tiempo de ejecución) configurado en el servidor o el intérprete.
  • Fallo de conexión con una base de datos u otro servicio dependiente.

Cómo comprobarlo

  1. Revisa siempre primero el log de error del servidor web: sudo tail -n 50 /var/log/apache2/error.log.
  2. Si usas PHP, revisa también su log específico, normalmente en /var/log/php*-fpm.log.
  3. Comprueba la sintaxis de cualquier .htaccess reciente.
  4. Verifica que el servicio de base de datos (si aplica) está activo y accesible.

Soluciones

1. Leer el error real en el log en vez de adivinar

sudo tail -f /var/log/apache2/error.log

El 90% de las veces el log indica la línea exacta y el motivo del fallo (script, permisos, dependencia, etc.).

2. Corregir permisos de ejecución

sudo chown -R www-data:www-data /var/www/mi-app
sudo chmod -R 755 /var/www/mi-app

3. Aumentar límites del intérprete si es necesario

Si el log indica un límite de memoria o tiempo agotado, ajusta la configuración del intérprete correspondiente (por ejemplo memory_limit o max_execution_time en PHP) solo lo necesario, no de forma desproporcionada.

Prevención

  • Nunca modifiques código o configuración directamente en producción sin probarlo antes en un entorno de pruebas.
  • Configura alertas de monitorización que avisen ante un aumento de errores 500.
  • Revisa los logs de forma rutinaria, no solo cuando algo ya ha fallado.

Preguntas frecuentes

¿Por qué el navegador no muestra el error real?

Por seguridad, los servidores en producción suelen ocultar el detalle técnico al usuario final y solo muestran un mensaje genérico. El detalle siempre queda registrado en los logs del servidor.

¿Un 500 siempre es culpa del código de la aplicación?

No necesariamente: también puede deberse a configuración del servidor, permisos de archivos, o a un servicio dependiente (como la base de datos) que no está disponible.

Artículos relacionados