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 :
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
# 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
<script defer
data-tracking-code="YOUR_TRACKING_CODE"
src="/api/_z/script.js">
</script>
Configuration Apache
Étape 1 : Activer les modules requis
Tout d'abord, activez les modules Apache nécessaires :
# 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 :
<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) :
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
# 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
<script defer
data-tracking-code="YOUR_TRACKING_CODE"
src="/api/_z/script.js">
</script>Vérifier que cela fonctionne
Tester avec curl
# 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
- Ouvrez votre site web dans un navigateur
- Ouvrez DevTools (F12)
- Allez à l'onglet Réseau
- Rechargez la page
- Cherchez
/api/_z/script.js
Vous devriez voir :
- Statut : 200
- Domaine : Votre domaine (pas api.zenovay.com)
- Réponse : Code JavaScript
Tester dans Firefox
- Ouvrez Firefox
- Paramètres → Confidentialité et sécurité → Protection renforcée du suivi : Strict
- Visitez votre site
- 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 :
- Vérifiez que
proxy_ssl_server_name on;est défini - Vérifiez que votre serveur peut atteindre api.zenovay.com :
curl https://api.zenovay.com/fp/script.js - 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 :
- Assurez-vous que la barre oblique à la fin est cohérente :
location /api/_z/correspond à/api/_z/script.jsproxy_pass https://api.zenovay.com/fp/;(notez la barre oblique à la fin)
- Testez avec
nginx -tet rechargez
Apache : 503 Service Unavailable
Cause : Modules de proxy non activés ou problème SSL.
Solution :
- Activez les modules requis :
sudo a2enmod proxy proxy_http ssl - Ajoutez les paramètres de proxy SSL :
SSLProxyEngine on SSLProxyVerify none - 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) :
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
<Location "/api/_z/">
# Activer la mise en cache
CacheEnable disk
CacheDefaultExpire 3600
</Location>Exemple nginx complet
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 -touapachectl 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-codecontient votre code de suivi correct - L'en-tête
X-Zenovay-Real-IPest 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
- Événements personnalisés - Suivre les interactions utilisateur
- Identification des visiteurs - Lier l'analytique aux utilisateurs
- Dépannage - Plus d'aide sur les problèmes