Nginx Access Logs : Signification des champs et analyse

Web2026-09-22TryQuickToolBox

Les logs d'accès Nginx enregistrent chaque requête traitée par votre serveur web. C'est le premier endroit à consulter pour déboguer des 404, traquer des endpoints lents ou investiguer du trafic suspect. Pourtant, beaucoup de développeurs survolent les lignes brutes sans comprendre chaque champ. Ce guide détaille le format de log Nginx par défaut, montre comment le personnaliser et présente des techniques d'analyse pratiques avec les outils en ligne de commande standards.

Format de log d'accès Nginx par défaut

Par défaut, Nginx utilise le format combined, qui ressemble à ceci :

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

Une ligne de log typique :

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"

Explication champ par champ

ChampVariableDescription
Adresse distante$remote_addrAdresse IP du client effectuant la requête.
Utilisateur distant$remote_userNom d'utilisateur si l'authentification HTTP est utilisée ; sinon -.
Heure locale$time_localHeure locale du serveur au format [jour/mois/année:heure:minute:seconde zone].
Requête$requestLigne de requête complète : méthode, chemin et protocole HTTP.
Statut$statusCode de statut de la réponse HTTP (ex. 200, 404, 500).
Octets du corps envoyés$body_bytes_sentTaille du corps de la réponse en octets, en-têtes exclus.
Referer$http_refererLa page ayant mené à la requête (si fournie par le client).
User agent$http_user_agentChaîne du logiciel client (navigateur, bot, outil).

Personnaliser le format de log

Vous pouvez définir votre propre format pour capturer des détails supplémentaires comme le temps de requête, le temps de réponse upstream ou le ratio gzip. Ajoutez une directive log_format dans le bloc http et référencez-la dans 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 supplémentaires courantes :

Analyser les logs Nginx avec les outils en ligne de commande

Pas besoin de logiciels coûteux pour extraire des informations. Les outils Unix standards comme grep, awk, sort et uniq suffisent pour la plupart des tâches.

1. Trouver les adresses IP les plus fréquentes

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

Cela aide à identifier les gros consommateurs ou de potentielles sources de DDoS.

2. Identifier les URLs les plus demandées

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

Utile pour comprendre le contenu populaire ou repérer des schémas inhabituels.

3. Compter les codes de statut HTTP

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

Voyez rapidement combien de 404 ou 500 se produisent.

4. Trouver les requêtes avec des temps de réponse lents

Si vous avez ajouté $request_time à votre format de log, vous pouvez filtrer les requêtes lentes :

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

Ajustez le seuil (1 seconde ici) selon vos besoins.

5. Détecter les user agents suspects

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

Repérez les bots malveillants connus ou les clients inhabituels.

Cas d'usage concrets

Automatiser l'analyse avec des parseurs de logs

Bien que les one-liners en ligne de commande conviennent aux requêtes ponctuelles, un reporting régulier bénéficie d'outils dédiés. Vous pouvez utiliser des analyseurs de logs open source comme GoAccess ou AWStats, ou créer des scripts personnalisés. Pour un parsing rapide dans le navigateur sans rien installer, le Nginx Log Analyzer vous permet de coller des lignes de log et d'obtenir instantanément des synthèses des codes de statut, des IPs principales et des chemins demandés.

Bonnes pratiques pour la gestion des logs

FAQ

Quelle est la différence entre les logs d'accès et les logs d'erreur dans Nginx ?

Les logs d'accès enregistrent chaque requête traitée par Nginx, incluant l'IP client, la méthode de requête, le code de statut et le user agent. Les logs d'erreur capturent les messages de diagnostic sur les problèmes serveur, comme les connexions échouées, les erreurs de configuration ou les timeouts upstream. Les deux sont essentiels pour différents scénarios de dépannage.

Comment voir la véritable IP client quand Nginx est derrière un load balancer ?

Quand Nginx se trouve derrière un proxy ou un load balancer, $remote_addr affiche l'IP du load balancer. Pour logger l'IP client originale, configurez le module real_ip pour faire confiance à l'IP du load balancer et utilisez $http_x_forwarded_for ou $realip_remote_addr dans votre format de log.

Puis-je analyser les logs Nginx sans installer de logiciel ?

Oui. Vous pouvez utiliser les commandes Unix standards comme grep, awk et sort directement dans le terminal. Pour une approche graphique dans le navigateur, des outils en ligne comme le Nginx Log Analyzer offrent des informations rapides sans aucune installation.

Prêt à plonger dans vos logs ? Essayez le Nginx Log Analyzer pour parser et visualiser vos logs d'accès en quelques secondes—aucune configuration requise.