Où Trouver les Journaux d’Accès Nginx et Apache

Où Trouver les Journaux d’Accès Nginx et Apache

SOC Prime Team
SOC Prime Team linkedin icon Suivre

Sur Debian et Ubuntu, Nginx consigne à /var/log/nginx/access.log et error.log, et Apache à /var/log/apache2/access.log et error.log. Sur RHEL, Rocky et Alma, Apache utilise /var/log/httpd/access_log et error_log, avec des underscores et sans extension. Dans les conteneurs construits à partir de l’image officielle Nginx, il n’y a pas de fichiers log du tout : tout va à stdout et stderr, donc les logs docker sont votre exportation.

Le journal du serveur web est souvent le premier endroit où une intrusion laisse une trace : le scanner balayant les fichiers .env, la chaîne d’exploitation, le POST vers un fichier qui ne devrait pas exister. Prime Core dispose de 812 règles de détection pour les journaux de serveurs web, mappées à 337 techniques ATT&CK de MITRE. Parmi elles : exploitation d’applications exposées au public (T1190), web shells (T1505.003) et scan de vulnérabilités (T1595.002).

Commencez gratuitement

Avant de commencer

Trouvez les chemins réels. Les hôtes virtuels consignant souvent ailleurs, demandez au serveur lui-même :

# Nginx : videz la configuration effective complète et extrayez les directives de journaux

sudo nginx -T 2>/dev/null | grep -E 'access_log|error_log'


# Apache

sudo apachectl -S

sudo grep -Ri -E 'CustomLog|ErrorLog' /etc/apache2/ /etc/httpd/ 2>/dev/null

Sur Apache basé sur Debian, les hôtes virtuels sans leur propre CustomLog finissent dans other_vhosts_access.log. Les gens passent souvent à côté de celui-là.

Vérifiez quelle adresse IP vous consignez. Derrière un équilibrage de charge, un CDN ou un proxy inverse, chaque requête peut sembler provenir du proxy. Cela est vrai sauf si le serveur est configuré pour consigner le vrai client : set_real_ip_from et real_ip_header dans Nginx, mod_remoteip dans Apache. Si chaque ligne affiche les mêmes quelques IP internes, l’adresse de l’attaquant est uniquement dans X-Forwarded-For, si vous la consignez, ou dans les propres journaux du proxy.

Vérifiez le format. Les deux serveurs utilisent par défaut le format « combiné », mais de nombreuses configurations le personnalisent (log_format dans Nginx, LogFormat dans Apache). Notez à quoi ressemble le vôtre avant de téléverser.

Autorisations. Sur Debian et Ubuntu, ces journaux sont lisibles par root et le groupe adm; ailleurs, prévoyez sudo.

Exporter à partir des fichiers journaux

Les journaux tournent quotidiennement ou hebdomadairement, incluez donc les fichiers tournés. zcat -f lit à la fois les fichiers en clair et compressés au format gzip :

# Nginx, actuels et tournés, les plus anciens en premier

sudo zcat -f $(ls -tr /var/log/nginx/access.log*) > web-03_nginx_access.log



# Apache sur RHEL

sudo zcat -f $(ls -tr /var/log/httpd/access_log*) > web-03_httpd_access.lo

Pour une seule journée, les horodatages au format combiné rendent grep suffisant :

grep '19/Oct/2026' web-03_nginx_access.log > web-03_access_1019.log

Prenez également le journal des erreurs. Les échecs en amont, les erreurs PHP et certaines tentatives d’exploitation n’apparaissent que là.

Exporter à partir des conteneurs

# Docker : stdout est le journal d'accès, stderr le journal d'erreurs

docker logs --since 2026-10-19T00:00:00 --until 2026-10-20T00:00:00 nginx > nginx_access.log 2> nginx_error.log


# Kubernetes

kubectl logs deploy/nginx --since=24h > nginx.log

Les journaux de conteneurs disparaissent avec le conteneur à moins que quelque chose ne les collecte. Si le pod a été remplacé, vérifiez le collecteur de journaux de votre cluster.

Que rechercher

MotifCe que cela signifie généralement
Explosions de 404 pour /.env, /.git/config, /wp-login.php, /phpmyadminScan automatisé
../, ${jndi:, union select, <script> dans l’URLTentatives d’exploitation : traversée, Log4Shell, injection SQL, XSS
200 sur un POST vers un fichier étrange dans un répertoire de téléchargementPossible web shell; regardez ce que cette IP a demandé d’autre
Agents utilisateurs comme sqlmap, nikto, nucleiOutils qui ne se sont pas donné la peine de se cacher
Une pointe de 5xx juste après des requêtes étrangesQuelque chose s’est cassé, probablement parce qu’une exploitation a abouti

Téléverser, assainir et examiner dans LogTotal

  1. Téléverser. Ouvrir logtotal.com et déposez le fichier.
  2. Assainir. [what gets masked: client IPs, hostnames, usernames and tokens in URLs]. Look it over before you continue. Query strings often carry session tokens.
  3. Examiner.

Quand ça tourne mal

SymptômeCause probableFix
Pas de /var/log/nginxChemin personnalisé, ou il s’exécute dans un conteneurnginx -T, ou docker logs
access.log existe mais est videLes journaux vont à stdout, ou access_log offVérifiez la configuration et le conteneur
Chaque requête vient des mêmes IPProxy ou équilibrage de charge devant; vrai IP non configuréUtilisez X-Forwarded-For ou les journaux du proxy
Seulement les derniers joursFichiers tournés omisUtilisez la commande zcat -f avec le * glob
Accès refuséPas root, pas dans admsudo

FAQ

Qu’est-ce qui importe le plus, le journal d’accès ou le journal des erreurs ?

Le journal d’accès vous dit ce qui a été demandé. Le journal des erreurs vous dit ce qui s’est cassé. Dans un cas d’exploitation, vous voulez les deux, côte à côte.

Et IIS ?

IIS écrit les journaux W3C à C:inetpublogsLogFiles par défaut. Cela a son propre guide.

Rejoignez la plateforme Detection as Code de SOC Prime pour améliorer la visibilité sur les menaces les plus pertinentes pour votre entreprise. Pour vous aider à démarrer et à générer une valeur immédiate, planifiez dès maintenant une réunion avec des experts de SOC Prime.