Logs de acceso de Nginx: Qué significa cada campo y cómo analizarlos

Web2026-09-22TryQuickToolBox

Los logs de acceso de Nginx registran cada solicitud que maneja tu servidor web. Son el primer lugar donde buscar al depurar errores 404, rastrear endpoints lentos o investigar tráfico sospechoso. Sin embargo, muchos desarrolladores revisan las líneas de log sin comprender completamente cada campo. Esta guía desglosa el formato de log predeterminado de Nginx, muestra cómo personalizarlo y recorre técnicas prácticas de análisis usando herramientas estándar de línea de comandos.

Formato predeterminado del log de acceso de Nginx

De forma predeterminada, Nginx usa el formato de log combined, que se ve así:

log_format combined '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

Una línea de log típica:

192.0.2.1 - - [10/Oct/2023:13:55:36 +0000] "GET /api/users HTTP/1.1" 200 1234 "https://example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"

Explicación campo por campo

CampoVariableDescripción
Dirección remota$remote_addrDirección IP del cliente que realiza la solicitud.
Usuario remoto$remote_userNombre de usuario si se usa autenticación HTTP; de lo contrario, -.
Hora local$time_localHora local del servidor en formato [día/mes/año:hora:minuto:segundo zona].
Solicitud$requestLínea completa de la solicitud: método, ruta y protocolo HTTP.
Estado$statusCódigo de estado de respuesta HTTP (por ejemplo, 200, 404, 500).
Bytes del cuerpo enviados$body_bytes_sentTamaño del cuerpo de la respuesta en bytes, excluyendo las cabeceras.
Referer$http_refererLa página que enlazó a la solicitud (si la proporciona el cliente).
User agent$http_user_agentCadena del software cliente (navegador, bot, herramienta).

Personalizar el formato del log

Puedes definir tu propio formato para capturar detalles adicionales como el tiempo de solicitud, el tiempo de respuesta del upstream o la tasa de compresión gzip. Agrega una directiva log_format en el bloque http y referénciala en access_log.

http {
    log_format detailed '$remote_addr - $remote_user [$time_local] '
                        '"$request" $status $body_bytes_sent '
                        '"$http_referer" "$http_user_agent" '
                        'rt=$request_time uct="$upstream_connect_time" '
                        'uht="$upstream_header_time" urt="$upstream_response_time"';

    access_log /var/log/nginx/access.log detailed;
}

Variables adicionales comunes:

Analizar logs de Nginx con herramientas de línea de comandos

No necesitas software costoso para extraer información. Herramientas estándar de Unix como grep, awk, sort y uniq son suficientemente potentes para la mayoría de las tareas.

1. Encontrar las direcciones IP más frecuentes

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

Esto ayuda a identificar clientes pesados o posibles fuentes de DDoS.

2. Identificar las URL más solicitadas

awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

Útil para entender el contenido popular o detectar patrones inusuales.

3. Contar códigos de estado HTTP

awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr

Ver rápidamente cuántos 404 o 500 están ocurriendo.

4. Encontrar solicitudes con tiempos de respuesta lentos

Si agregaste $request_time a tu formato de log, puedes filtrar solicitudes lentas:

awk '{ if ($NF > 1) print }' /var/log/nginx/access.log

Ajusta el umbral (1 segundo aquí) según sea necesario.

5. Detectar user agents sospechosos

awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

Busca bots maliciosos conocidos o clientes inusuales.

Casos de uso prácticos

Automatizar el análisis con analizadores de logs

Si bien los comandos de una línea funcionan para consultas puntuales, los informes regulares se benefician de herramientas dedicadas. Puedes usar analizadores de logs de código abierto como GoAccess o AWStats, o crear scripts personalizados. Para un análisis rápido basado en navegador sin instalar nada, el Nginx Log Analyzer te permite pegar líneas de log y obtener resúmenes instantáneos de códigos de estado, IPs principales y rutas solicitadas.

Buenas prácticas para la gestión de logs

Preguntas frecuentes

¿Cuál es la diferencia entre los logs de acceso y los logs de error en Nginx?

Los logs de acceso registran cada solicitud manejada por Nginx, incluyendo la IP del cliente, el método de solicitud, el código de estado y el user agent. Los logs de error capturan mensajes de diagnóstico sobre problemas del servidor, como conexiones fallidas, errores de configuración o tiempos de espera del upstream. Ambos son esenciales para diferentes escenarios de solución de problemas.

¿Cómo puedo ver la IP real del cliente cuando Nginx está detrás de un balanceador de carga?

Cuando Nginx está detrás de un proxy o balanceador de carga, $remote_addr muestra la IP del balanceador. Para registrar la IP original del cliente, configura el módulo real_ip para confiar en la IP del balanceador y usa $http_x_forwarded_for o $realip_remote_addr en tu formato de log.

¿Puedo analizar logs de Nginx sin instalar software?

Sí. Puedes usar comandos estándar de Unix como grep, awk y sort directamente en la terminal. Para un enfoque gráfico basado en navegador, herramientas en línea como el Nginx Log Analyzer proporcionan información rápida sin ninguna instalación.

¿Listo para sumergirte en tus logs? Prueba el Nginx Log Analyzer para analizar y visualizar tus logs de acceso en segundos—sin configuración requerida.