Assistance/Guides proxy
Guides proxy

Proxy Flowsery Analytics avec PHP

Faites transiter Flowsery Analytics via votre serveur PHP afin d'eviter les interferences des bloqueurs de publicites et de capturer des donnees visiteurs plus precises.

1. Creer les endpoints proxy

Configurez deux fichiers PHP pour gerer les requetes proxifiees :

script.php

PHP
<?php
header('Content-Type: application/javascript');
header('Cache-Control: public, max-age=31536000');
 
$ch = curl_init('https://cdn.flowsery.com/main.js');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$script = curl_exec($ch);
curl_close($ch);
 
echo $script;
PHP
<?php
header('Content-Type: application/json');
 
// Resolve the real visitor IP
function getClientIp() {
    if (!empty($_SERVER['HTTP_CF_CONNECTING_IP'])) {
        return $_SERVER['HTTP_CF_CONNECTING_IP'];
    }
    if (!empty($_SERVER['HTTP_X_REAL_IP'])) {
        return $_SERVER['HTTP_X_REAL_IP'];
    }
    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        return trim($ips[0]);
    }
    return $_SERVER['REMOTE_ADDR'] ?? '';
}
 
// Determine the origin from request headers or build it from server variables
$origin = $_SERVER['HTTP_ORIGIN'] ??
    ($_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'];
 
$clientIp = getClientIp();
 
$requestHeaders = [
    'Content-Type: application/json',
    'User-Agent: ' . $_SERVER['HTTP_USER_AGENT'],
    'Origin: ' . $origin,
    'x-forwarded-for: ' . $clientIp,
];
 
if (!empty($clientIp)) {
    // CRITICAL: Flowsery reads this as the authoritative visitor IP. Without it, every visitor resolves to your server's region.
    $requestHeaders[] = 'x-flowsery-real-ip: ' . $clientIp;
}
 
$ch = curl_init('https://analytics.flowsery.com/analytics/events');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents('php://input'));
curl_setopt($ch, CURLOPT_HTTPHEADER, $requestHeaders);
$response = curl_exec($ch);
curl_close($ch);
 
echo $response;

Remarque : si votre application possede deja un endpoint /api/track, utilisez l'attribut data-api sur la balise script Flowsery Analytics pour diriger les evenements vers un autre chemin. Par exemple, data-api="/flowsery-events" redirige les donnees vers /flowsery-events.

Important : si tous les visiteurs apparaissent au meme endroit dans votre tableau de bord, verifiez que l'en-tete x-flowsery-real-ip est bien defini sur la vraie IP du visiteur (et non celle du serveur proxy) lors du transfert des requetes vers le endpoint /events de Flowsery Analytics.

2. Configurer le routage du serveur web

Apache (.htaccess)

APACHE
RewriteEngine On
RewriteRule ^js/script\.js$ script.php [L]
RewriteRule ^api/events$ events.php [L]
Nginx
location /js/main.js {
    try_files $uri $uri/ /script.php?$query_string;
}
 
location /api/track {
    try_files $uri $uri/ /events.php?$query_string;
}

3. Modifier la balise script

Remplacez le snippet Flowsery Analytics par la version proxifiee :

HTML
<script defer data-fl-website-id="flid_******" src="/js/main.js"></script>

4. Deployer

Apres le deploiement de vos changements, la configuration proxy s'active automatiquement.

Verifier que cela fonctionne

Pour valider le bon fonctionnement du proxy :

  1. Ouvrez votre site web
  2. Ouvrez les outils de developpement de votre navigateur et passez a l'onglet Reseau
  3. Verifiez que les requetes analytics sont servies depuis votre domaine plutot que depuis analytics.flowsery.com

Depannage

Tous les visiteurs apparaissent au meme endroit

Lorsque tous les visiteurs affichent une seule localisation geographique (generalement la region de votre serveur), le proxy ne transmet pas correctement les vraies IP des visiteurs.

Resolution :

  1. Assurez-vous que votre proxy inclut l'en-tete x-flowsery-real-ip contenant la vraie adresse IP du visiteur (et non celle du serveur) lors du transfert des requetes vers le endpoint /events de Flowsery Analytics
  2. Si PHP est derriere un autre proxy (Cloudflare, Vercel, etc.), $_SERVER['REMOTE_ADDR'] sera l'IP du proxy amont : lisez plutot $_SERVER['HTTP_CF_CONNECTING_IP'] ou $_SERVER['HTTP_X_REAL_IP']