Soporte/Guías de proxy
Guías de proxy

Proxy de Flowsery Analytics con PHP

Enruta Flowsery Analytics a través de tu servidor PHP para evitar la interferencia de los adblockers y capturar datos de visitantes más precisos.

1. Crea los endpoints del proxy

Configura dos archivos PHP que manejen las solicitudes proxificadas:

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;

Nota: Si tu aplicación ya tiene un endpoint /api/track, usa el atributo data-api en la etiqueta del script de Flowsery Analytics para apuntar los eventos a otra ruta. Por ejemplo, data-api="/flowsery-events" dirigirá los datos a /flowsery-events.

Importante: Si todos los visitantes aparecen en la misma ubicación en tu panel, confirma que el encabezado x-flowsery-real-ip se esté estableciendo con la IP real del visitante, no con la del servidor proxy, al reenviar solicitudes al endpoint /events de Flowsery Analytics.

2. Configura el enrutamiento del servidor 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. Modifica la etiqueta del script

Reemplaza el snippet original de Flowsery Analytics por la versión con proxy:

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

4. Despliega

Después de desplegar tus cambios, la configuración del proxy se activa automáticamente.

Confirmar que funciona

Para validar que el proxy funciona correctamente:

  1. Navega a tu sitio web.
  2. Abre las herramientas de desarrollo del navegador y ve a la pestaña Network.
  3. Verifica que las solicitudes de analítica se sirvan desde tu dominio y no desde analytics.flowsery.com.

Solución de problemas

Todos los visitantes aparecen desde la misma ubicación

Cuando todos los visitantes muestran una única ubicación geográfica, normalmente la región de tu servidor, el proxy no está reenviando correctamente las IP reales.

Resolución:

  1. Asegúrate de que tu proxy incluya el encabezado x-flowsery-real-ip con la IP real del visitante, no con la IP del servidor, al reenviar solicitudes al endpoint /events de Flowsery Analytics.
  2. Si PHP está detrás de otro proxy, como Cloudflare o Vercel, $_SERVER['REMOTE_ADDR'] será la IP del proxy ascendente, así que usa directamente $_SERVER['HTTP_CF_CONNECTING_IP'] o $_SERVER['HTTP_X_REAL_IP'].