Passer au contenu principal
Utilisez ce guide lorsque votre site tourne sur un serveur Apache administré par vous ou par votre hébergeur, et qu’aucun connecteur de CDN ou de plateforme ne s’applique. Apache écrit les requêtes des crawlers d’IA dans un fichier de log dédié, au format attendu par Qwairy. Un script planifié envoie ensuite les fichiers fermés au collecteur HTTP générique. Le fichier dédié s’ajoute à vos logs d’accès existants, qui continuent de fonctionner si vous suivez l’étape de l’hôte virtuel. Qwairy ne reçoit que la méthode, le chemin, le nom d’hôte, le User-Agent, l’heure et le statut des requêtes de crawlers d’IA.
Si un CDN ou un cache de pages complètes répond à certaines requêtes avant Apache, ces requêtes n’arrivent jamais dans les logs d’Apache. Collectez plutôt au niveau de cette couche, ou acceptez des comptes partiels.

Avant de commencer

Si vous n’administrez pas le serveur, transmettez cette liste à la personne qui le gère. Il lui faut :
  • Apache 2.4 avec mod_rewrite, mod_setenvif et mod_log_config activés, et le programme rotatelogs installé avec Apache ;
  • l’autorisation de modifier la configuration d’Apache et de le recharger ;
  • un shell Linux avec sh, curl, find, split et sha256sum, et un moyen de lancer une commande toutes les cinq minutes, comme cron ;
  • un accès HTTPS sortant depuis le serveur vers https://www.qwairy.co ;
  • le ServerName de l’hôte virtuel, qui doit être le nom d’hôte configuré pour la marque Qwairy, ou son équivalent apex ou www ;
  • une clé créée dans Qwairy, comme décrit ci-dessous.
N’activez qu’une seule source de livraison Analytics des crawlers pour la marque.

Créer et protéger la clé

  1. Dans Measure > Analytics des crawlers > Paramètres, sélectionnez API HTTP générique.
  2. Sélectionnez Créer une clé, puis saisissez un nom descriptif et le fuseau horaire IANA utilisé pour les analytics quotidiennes.
  3. Copiez le secret lorsqu’il apparaît. Qwairy n’en affiche ensuite que le préfixe.
  4. Sur le serveur, enregistrez-le dans un fichier lisible uniquement par l’utilisateur qui exécute le script :
Remplacez YOUR_CRAWLER_KEY par le secret. Ne le commitez pas dans le gestionnaire de code source et ne l’écrivez pas dans des logs.

Écrire un fichier de log dédié

La configuration ci-dessous écrit un événement JSON par ligne, uniquement pour les requêtes GET et HEAD des crawlers d’IA connus. Un nouveau fichier démarre toutes les cinq minutes : le script d’envoi ne lit donc que des fichiers qu’Apache a fermés.
1

Créez le répertoire de logs

Utilisez le répertoire de logs de votre distribution, par exemple /var/log/httpd sur les systèmes dérivés de Red Hat, et gardez le même chemin à chaque étape.
2

Définissez le filtre de crawlers et le format de log

Ajoutez ces lignes à la configuration principale du serveur, en dehors de tout bloc <VirtualHost> :
La liste des User-Agents correspond aux recettes générées dans Qwairy. Qwairy réapplique son registre maintenu à la réception : une liste plus ancienne ne manque que les identités ajoutées depuis.
3

Journalisez les requêtes des crawlers d’IA dans l’hôte virtuel

Ajoutez ces lignes dans le <VirtualHost> qui sert le site en HTTPS, avant toute autre règle de réécriture.Si cet hôte virtuel n’a pas encore de ligne CustomLog, il écrit dans le log d’accès principal du serveur. Un CustomLog ajouté dans un hôte virtuel interrompt cet héritage : copiez d’abord la ligne CustomLog principale dans l’hôte virtuel pour conserver votre log d’accès habituel.
Lancez command -v rotatelogs et utilisez le chemin renvoyé. Si un autre hôte virtuel sert aussi des pages du même site, ajoutez-y les mêmes lignes avec un autre préfixe de fichier.
4

Vérifiez et rechargez Apache

Chaque choix de cette configuration évite une erreur connue : Une ligne ressemble à ceci :

Envoyer les fichiers fermés

Enregistrez ce script sous /usr/local/bin/qwairy-send-logs, puis lancez sudo chmod 700 /usr/local/bin/qwairy-send-logs :
Le script ne s’exécute qu’une fois à la fois et attend d’abord un délai aléatoire de quatre minutes au plus, pour que les serveurs n’envoient pas tous à la même minute. Il regroupe ensuite tous les fichiers fermés en lots d’au plus 1 000 lignes et 1 900 000 octets : un site peu visité par les crawlers n’envoie donc qu’une requête par passage. Chaque lot part avec une Idempotency-Key dérivée de son contenu, et un répertoire d’étape permet à un passage interrompu de reprendre avec les mêmes lots : aucune ligne n’est comptée deux fois. Il traite les réponses ainsi : Planifiez le script toutes les cinq minutes, par exemple dans /etc/cron.d/qwairy :
Si le répertoire de logs diffère de /var/log/apache2/qwairy, ajoutez QWAIRY_LOG_DIR=/votre/chemin avant le script dans la ligne cron. Pour lancer le script à la main sans délai aléatoire, définissez QWAIRY_MAX_DELAY=0 :

Vérifier la livraison

  1. Demandez une page en tant que crawler d’IA, en remplaçant le nom d’hôte :
  2. Vérifiez qu’une ligne apparaît dans le fichier le plus récent de /var/log/apache2/qwairy, avec "request_path":"/", votre ServerName et une heure avec décalage.
  3. Attendez au moins six minutes, puis lancez le script une fois à la main avec la commande ci-dessus. Il n’affiche rien lorsque tous les lots ont été acceptés, et failed/ reste vide.
  4. Dans Qwairy, attendez que le connecteur passe de l’état en attente à connecté, puis ouvrez le jour analytique en cours et cherchez la page.

Limites et comportement

  • Les événements arrivent dans Qwairy environ 6 à 20 minutes après la requête : jusqu’à cinq minutes avant la fermeture du fichier, six minutes avant que le script le considère comme fermé, jusqu’à cinq minutes avant le passage suivant de cron, et jusqu’à quatre minutes de délai aléatoire.
  • Les événements sont acceptés jusqu’à 72 heures après la fin de leur jour analytique. Si l’envoi s’arrête plus longtemps, les événements plus anciens sortent de la fenêtre d’arrivée tardive et sont rejetés. Les logs d’accès historiques ne peuvent pas être importés.
  • Seules les requêtes GET et HEAD des crawlers d’IA listés, avec une ligne de requête en ASCII imprimable et un User-Agent en ASCII imprimable de 512 caractères au plus, sont écrites. Le trafic humain et les autres requêtes ne quittent jamais le serveur.
  • Une seule ligne invalide fait renvoyer 400 à tout le lot. Les autres lignes de ce lot ne sont pas comptées tant que vous ne l’avez pas corrigé.
  • Les requêtes servies par un CDN ou un cache avant Apache ne sont pas observées.

Dépannage

Revenir en arrière

  1. Retirez de l’hôte virtuel les lignes CustomLog et de réécriture de Qwairy, conservez votre CustomLog habituel, puis lancez sudo apachectl graceful.
  2. Attendez au moins six minutes pour que le dernier fichier soit considéré comme fermé, puis lancez le script une dernière fois à la main avec la commande ci-dessus.
  3. Vérifiez que le répertoire de logs ne contient plus qu’un répertoire failed/ vide. Traitez tout lot restant avant de continuer.
  4. Supprimez /etc/cron.d/qwairy, /usr/local/bin/qwairy-send-logs, /etc/qwairy/crawler.env et le répertoire de logs.
  5. Révoquez la clé dans Qwairy.
Arrêter la livraison crée un trou de couverture. Vérifiez les alertes de continuité de livraison avant de comparer des périodes qui l’encadrent. Directives Apache vérifiées dans la documentation de mod_log_config, mod_rewrite, mod_setenvif et rotatelogs le 30 octobre 2026, avec Apache 2.4.

Pages associées