Inicio » Linux » Cómo deshabilitar los logs de Apache2 en un VirtualHost

Cómo deshabilitar los logs de Apache2 en un VirtualHost

Loading

Apache2 genera registros de actividad para prácticamente todas las peticiones que recibe. Estos registros son muy útiles para analizar errores, detectar problemas y revisar la actividad de un servidor, pero en determinadas situaciones puede interesarnos deshabilitar los logs de un VirtualHost concreto.

Por ejemplo, podemos tener un VirtualHost utilizado para una aplicación interna, un servicio de pruebas o un sitio que recibe un volumen muy elevado de peticiones y no queremos almacenar todos sus accesos.

En este artículo veremos cómo hacerlo correctamente en Apache2 sobre Debian/Ubuntu.

¿Qué tipos de logs genera Apache?

Los dos registros principales que podemos encontrar son:

  • Access Log: registra las peticiones HTTP/HTTPS recibidas.
  • Error Log: registra errores y determinados eventos relacionados con Apache.

Normalmente podemos encontrarlos en:

/var/log/apache2/

Por ejemplo:

access.log
error.log
other_vhost_access.log
other_vhost_error.log

La configuración de estos registros se realiza principalmente mediante las directivas:

CustomLog
ErrorLog

Deshabilitar los logs de un VirtualHost

La forma más sencilla de deshabilitar los registros de un VirtualHost concreto es enviar ambos logs a /dev/null.

Por ejemplo:

<VirtualHost *:80>
    ServerName tudominio.com

    CustomLog /dev/null combined
    ErrorLog /dev/null

    # Resto de configuración...
</VirtualHost>

Con esta configuración:

CustomLog /dev/null combined

hace que Apache no almacene el registro de accesos en un fichero.

Mientras que:

ErrorLog /dev/null

hace que los errores de ese VirtualHost tampoco se almacenen.

En Linux, /dev/null es un dispositivo especial que descarta cualquier información que se escriba en él.

VirtualHost HTTPS

Si el sitio funciona mediante HTTPS, debemos aplicar la configuración también al VirtualHost correspondiente al puerto 443.

Por ejemplo:

<VirtualHost *:443>
    ServerName tudominio.com

    SSLEngine On

    CustomLog /dev/null combined
    ErrorLog /dev/null

    # Resto de configuración...
</VirtualHost>

Es importante revisar que no tengamos un VirtualHost independiente para HTTP y otro para HTTPS, ya que de lo contrario podríamos deshabilitar los logs de uno y continuar registrando las peticiones del otro.

Una opción más recomendable: conservar el ErrorLog

Aunque técnicamente podemos deshabilitar completamente los logs, en muchos casos no es recomendable eliminar también el registro de errores.

Una alternativa más segura es desactivar únicamente el registro de accesos:

<VirtualHost *:80>
    ServerName tudominio.com

    CustomLog /dev/null combined
    ErrorLog /var/log/apache2/tudominio-error.log

    # Resto de configuración...
</VirtualHost>

De esta forma no tendremos un registro de cada petición HTTP, pero seguiremos disponiendo de información si Apache encuentra un problema.

Esto puede ser especialmente útil en servidores de producción.

Aplicar los cambios

Una vez modificado el VirtualHost, antes de reiniciar Apache es recomendable comprobar que la configuración no contiene errores:

apache2ctl configtest

Si todo es correcto, veremos:

Syntax OK

A continuación podemos recargar la configuración sin detener Apache:

systemctl reload apache2

También podemos utilizar:

systemctl reload apache2.service

No es necesario reiniciar completamente el servidor web para este cambio.

Comprobar qué VirtualHost está utilizando Apache

Si tenemos varios dominios configurados, puede ser útil comprobar cómo los está interpretando Apache:

apache2ctl -S

Este comando muestra los VirtualHost configurados, incluyendo los puertos, dominios y archivos de configuración asociados.

Por ejemplo, podríamos encontrar algo parecido a:

*:80 is a NameVirtualHost
     default server ejemplo.com (/etc/apache2/sites-enabled/000-default.conf:1)
     port 80 namevhost ejemplo.com (/etc/apache2/sites-enabled/000-default.conf:1)
     port 80 namevhost tudominio.com (/etc/apache2/sites-enabled/tudominio.conf:1)

Esto resulta especialmente útil cuando tenemos muchos dominios configurados y queremos localizar exactamente qué archivo debemos modificar.

Localizar las directivas de logging

También podemos buscar todas las configuraciones de CustomLog y ErrorLog:

grep -R "CustomLog\|ErrorLog" /etc/apache2/sites-enabled/ /etc/apache2/conf-enabled/

Esto permite detectar rápidamente si existe alguna configuración adicional que esté generando logs.

Por ejemplo:

/etc/apache2/sites-enabled/tudominio.conf:    CustomLog /var/log/apache2/tudominio-access.log combined
/etc/apache2/sites-enabled/tudominio.conf:    ErrorLog /var/log/apache2/tudominio-error.log

¿Qué ocurre con los logs globales?

Hay que tener cuidado cuando Apache tiene configurados logs globales.

Por ejemplo, podemos encontrar en alguna configuración:

CustomLog ${APACHE_LOG_DIR}/access.log combined

Esta directiva puede hacer que Apache continúe registrando peticiones aunque hayamos modificado el VirtualHost.

Por eso, cuando queremos asegurarnos de que un VirtualHost concreto no genera registros, es importante revisar tanto la configuración del propio VirtualHost como las configuraciones globales de Apache.

Podemos localizar estas directivas mediante:

grep -R "CustomLog\|ErrorLog" /etc/apache2/

¿Es buena idea deshabilitar los logs?

Depende del objetivo.

Los logs de Apache pueden ocupar bastante espacio en servidores con mucho tráfico. Sin embargo, también proporcionan información muy valiosa para:

  • Diagnosticar errores.
  • Detectar ataques.
  • Analizar peticiones sospechosas.
  • Investigar problemas de rendimiento.
  • Saber qué URLs están siendo solicitadas.
  • Analizar errores HTTP 404, 403, 500, etc.

Por este motivo, antes de deshabilitarlos completamente es conveniente valorar alternativas como rotación de logs, reducción del nivel de logging o conservar únicamente el ErrorLog.

Configuración recomendada

Si el objetivo es reducir considerablemente la cantidad de información almacenada, una configuración equilibrada sería:

<VirtualHost *:80>
    ServerName tudominio.com

    CustomLog /dev/null combined
    ErrorLog /var/log/apache2/tudominio-error.log

    # Configuración de la aplicación...
</VirtualHost>

De esta manera dejamos de almacenar todas las peticiones pero mantenemos los errores importantes.

Si realmente queremos que Apache no escriba ningún log para ese VirtualHost, podemos utilizar:

<VirtualHost *:80>
    ServerName tudominio.com

    CustomLog /dev/null combined
    ErrorLog /dev/null

    # Configuración de la aplicación...
</VirtualHost>

Después:

apache2ctl configtest
systemctl reload apache2

Conclusión

Apache2 permite controlar los registros de cada VirtualHost de forma independiente mediante CustomLog y ErrorLog.

La opción más directa para deshabilitar completamente los logs es:

CustomLog /dev/null combined
ErrorLog /dev/null

Sin embargo, en servidores de producción suele ser más aconsejable mantener al menos el registro de errores, ya que puede resultar fundamental para diagnosticar problemas posteriormente.

Antes de aplicar cualquier cambio, conviene utilizar:

apache2ctl -S

para identificar el VirtualHost correcto y:

grep -R "CustomLog\|ErrorLog" /etc/apache2/

para comprobar si existen otras configuraciones de logging que puedan afectar al resultado.