Aller au contenu principal
8 min de lecture

Suivi first-party avec nginx/Apache

Configurez un proxy first-party sur votre serveur auto-hébergé en utilisant la configuration de proxy inverse nginx ou Apache.

Difficulté : Moyen - Nécessite l'accès aux fichiers de configuration du serveur et des connaissances élémentaires en terminal.

Pourquoi cela fonctionne (Same-Origin)

Cette approche utilise /api/_z/script.js qui est sur la même origine que votre site web. Firefox ETP et autres protections de suivi ne bloquent que les demandes cross-origin.

  • Le navigateur voit : yourdomain.com/api/_z/script.js → Même origine ✅
  • nginx/Apache proxy la demande vers le serveur Zenovay côté serveur (le navigateur ne voit jamais cela)
  • Toute protection de suivi est contournée car la demande est first-party

Avant de commencer

Assurez-vous d'avoir :

  • Accès root/sudo à votre serveur
  • nginx ou Apache installé
  • Votre code de suivi Zenovay (disponible sous Domaines, sélectionnez votre site, puis l'onglet Général)
  • Accès SSH à votre serveur

Format de votre code de suivi

Votre code de suivi ressemble à : ZV_XXXXXXXXXX

  • Commence par ZV_
  • Suivi de 10 caractères (lettres et chiffres)
  • SENSIBLE À LA CASSE - copiez-le exactement

Exemple : ZV_Q8U0GYD70WR


Configuration nginx

Étape 1 : Ajouter le bloc de proxy

Ajoutez le bloc location suivant à votre configuration de serveur nginx :

/etc/nginx/sites-available/yourdomain.confNGINX
server {
  listen 80;
  listen 443 ssl;
  server_name yourdomain.com www.yourdomain.com;

  # Votre configuration SSL existante...
  ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

  # Votre configuration root existante...
  root /var/www/yourdomain;
  index index.html;

  # Proxy first-party Zenovay
  location /api/_z/ {
      # Proxy vers le point de terminaison first-party de Zenovay
      proxy_pass https://api.zenovay.com/fp/;

      # Définir le bon en-tête Host
      proxy_set_header Host api.zenovay.com;

      # Transférer l'adresse IP réelle du client pour une géolocalisation précise
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Zenovay-Real-IP $remote_addr;

      # Requis pour le backend HTTPS
      proxy_ssl_server_name on;
      proxy_ssl_protocols TLSv1.2 TLSv1.3;

      # Délais d'attente
      proxy_connect_timeout 10s;
      proxy_send_timeout 10s;
      proxy_read_timeout 30s;

      # Mise en buffer
      proxy_buffering on;
      proxy_buffer_size 4k;
      proxy_buffers 8 4k;
  }

  # Vos blocs location existants...
  location / {
      try_files $uri $uri/ =404;
  }
}

Étape 2 : Tester la configuration

TerminalBash
# Tester la configuration nginx
sudo nginx -t

# Si le test réussit, rechargez nginx
sudo systemctl reload nginx

Étape 3 : Ajouter le script de suivi

Votre HTMLHTML
<script defer
data-tracking-code="YOUR_TRACKING_CODE"
src="/api/_z/script.js">
</script>
Carte du script de suivi montrant l'onglet First-Party avec l'extrait de script
L'onglet First-Party dans les paramètres Général de votre domaine affiche l'extrait de script préconfiguré pour le proxying first-party.

Configuration Apache

Étape 1 : Activer les modules requis

Tout d'abord, activez les modules Apache nécessaires :

TerminalBash
# Activer les modules de proxy
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod ssl
sudo a2enmod headers

# Redémarrer Apache
sudo systemctl restart apache2

Étape 2 : Ajouter la configuration du proxy

Ajoutez le contenu suivant à votre configuration d'hôte virtuel Apache :

/etc/apache2/sites-available/yourdomain.confAPACHE
<VirtualHost *:443>
  ServerName yourdomain.com
  ServerAlias www.yourdomain.com

  # Votre configuration SSL existante...
  SSLEngine on
  SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem

  # Votre racine de documents existante...
  DocumentRoot /var/www/yourdomain

  # Activer SSL pour les connexions de proxy
  SSLProxyEngine on
  SSLProxyVerify none
  SSLProxyCheckPeerCN off
  SSLProxyCheckPeerName off

  # Proxy first-party Zenovay
  ProxyPass "/api/_z/" "https://api.zenovay.com/fp/"
  ProxyPassReverse "/api/_z/" "https://api.zenovay.com/fp/"

  <Location "/api/_z/">
      # Ne pas conserver l'en-tête Host d'origine
      ProxyPreserveHost Off

      # Transférer l'adresse IP réelle du client
      RequestHeader set X-Zenovay-Real-IP "%{REMOTE_ADDR}s"
      RequestHeader set X-Real-IP "%{REMOTE_ADDR}s"
      RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}s"
  </Location>

  # Votre configuration existante...
  <Directory /var/www/yourdomain>
      Options Indexes FollowSymLinks
      AllowOverride All
      Require all granted
  </Directory>
</VirtualHost>

Alternative : Utiliser .htaccess

Si vous n'avez pas accès à la configuration Apache principale, vous pouvez utiliser .htaccess (nécessite mod_rewrite et mod_proxy) :

.htaccessAPACHE
RewriteEngine On

# Proxy first-party Zenovay
RewriteRule ^api/_z/(.*)$ https://api.zenovay.com/fp/$1 [P,L]

<IfModule mod_headers.c>
  <Location "/api/_z">
      RequestHeader set X-Zenovay-Real-IP "%{REMOTE_ADDR}s"
  </Location>
</IfModule>

Remarque : L'utilisation de .htaccess pour le proxying nécessite AllowOverride All et mod_proxy activé par votre hébergeur. De nombreux hébergeurs partagés ne l'autorisent pas.

Étape 3 : Tester et redémarrer

TerminalBash
# Tester la configuration Apache
sudo apachectl configtest

# Si le test réussit, redémarrez Apache
sudo systemctl restart apache2

Étape 4 : Ajouter le script de suivi

Votre HTMLHTML
<script defer
data-tracking-code="YOUR_TRACKING_CODE"
src="/api/_z/script.js">
</script>

Vérifier que cela fonctionne

Tester avec curl

TerminalBash
# Tester le point de terminaison du proxy
curl -I https://yourdomain.com/api/_z/script.js

# Résultat attendu :
# HTTP/2 200
# content-type: application/javascript
# ...

Vérifier l'onglet Réseau

  1. Ouvrez votre site web dans un navigateur
  2. Ouvrez DevTools (F12)
  3. Allez à l'onglet Réseau
  4. Rechargez la page
  5. Cherchez /api/_z/script.js

Vous devriez voir :

  • Statut : 200
  • Domaine : Votre domaine (pas api.zenovay.com)
  • Réponse : Code JavaScript

Tester dans Firefox

  1. Ouvrez Firefox
  2. Paramètres → Confidentialité et sécurité → Protection renforcée du suivi : Strict
  3. Visitez votre site
  4. Vérifiez que le script se charge correctement

Dépannage

nginx : 502 Bad Gateway

Cause : nginx ne peut pas se connecter à l'API Zenovay.

Solution :

  1. Vérifiez que proxy_ssl_server_name on; est défini
  2. Vérifiez que votre serveur peut atteindre api.zenovay.com :
    curl https://api.zenovay.com/fp/script.js
    
  3. Vérifiez les journaux d'erreurs nginx : sudo tail -f /var/log/nginx/error.log

nginx : 404 Not Found

Cause : Le bloc de location ne correspond pas.

Solution :

  1. Assurez-vous que la barre oblique à la fin est cohérente :
    • location /api/_z/ correspond à /api/_z/script.js
    • proxy_pass https://api.zenovay.com/fp/; (notez la barre oblique à la fin)
  2. Testez avec nginx -t et rechargez

Apache : 503 Service Unavailable

Cause : Modules de proxy non activés ou problème SSL.

Solution :

  1. Activez les modules requis : sudo a2enmod proxy proxy_http ssl
  2. Ajoutez les paramètres de proxy SSL :
    SSLProxyEngine on
    SSLProxyVerify none
    
  3. Vérifiez les journaux d'erreurs Apache : sudo tail -f /var/log/apache2/error.log

La géolocalisation affiche l'emplacement du serveur

Cause : L'adresse IP réelle du client n'est pas transférée correctement.

Solution : Assurez-vous que vous définissez l'en-tête X-Zenovay-Real-IP :

nginx :

proxy_set_header X-Zenovay-Real-IP $remote_addr;

Apache :

RequestHeader set X-Zenovay-Real-IP "%{REMOTE_ADDR}s"

Si vous êtes derrière Cloudflare ou un équilibreur de charge

Si votre serveur est derrière Cloudflare ou un autre proxy, utilisez l'adresse IP transférée :

nginx (derrière Cloudflare) :

proxy_set_header X-Zenovay-Real-IP $http_cf_connecting_ip;

nginx (derrière un équilibreur de charge) :

proxy_set_header X-Zenovay-Real-IP $http_x_forwarded_for;

Optimisation des performances

Mise en cache nginx

Ajoutez une mise en cache pour le script de suivi (optionnel) :

nginx.confNGINX
location /api/_z/ {
  proxy_pass https://api.zenovay.com/fp/;

  # ... autres paramètres de proxy ...

  # Mettre en cache le script pendant 1 heure
  proxy_cache_valid 200 1h;
  proxy_cache_use_stale error timeout updating;
  add_header X-Cache-Status $upstream_cache_status;
}

Mise en cache Apache

apache.confAPACHE
<Location "/api/_z/">
  # Activer la mise en cache
  CacheEnable disk
  CacheDefaultExpire 3600
</Location>

Exemple nginx complet

/etc/nginx/sites-available/yourdomain.confNGINX
server {
  listen 80;
  server_name yourdomain.com www.yourdomain.com;
  return 301 https://$server_name$request_uri;
}

server {
  listen 443 ssl http2;
  server_name yourdomain.com www.yourdomain.com;

  ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

  root /var/www/yourdomain;
  index index.html;

  # Proxy first-party Zenovay
  location /api/_z/ {
      proxy_pass https://api.zenovay.com/fp/;
      proxy_set_header Host api.zenovay.com;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Zenovay-Real-IP $remote_addr;
      proxy_ssl_server_name on;
  }

  location / {
      try_files $uri $uri/ /index.html;
  }
}

Liste de vérification finale

Avant d'avoir terminé, vérifiez TOUS ces points :

  • La configuration nginx/Apache a le bloc de proxy pour /api/_z/
  • Le test de configuration réussit (nginx -t ou apachectl configtest)
  • Le serveur a été rechargé après la modification de configuration
  • La balise script utilise /api/_z/script.js (pas l'URL Zenovay directe)
  • L'attribut data-tracking-code contient votre code de suivi correct
  • L'en-tête X-Zenovay-Real-IP est défini pour la géolocalisation
  • Testé dans Firefox avec la Protection renforcée du suivi définie sur Strict
  • Les visites apparaissent dans le tableau de bord Zenovay

Prochaines étapes

Cette page vous a-t-elle été utile ?