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

Proxy de Flowsery Analytics con Nginx

Enruta Flowsery Analytics a través de Nginx para evitar la interferencia de los adblockers y capturar datos de visitantes precisos. Esta guía aplica tanto a Nginx independiente como a Nginx funcionando como proxy reverso delante de un servidor de aplicaciones.

La configuración tiene dos elementos esenciales: un proxy_pass que hace que los eventos sean first-party y resistentes a los adblockers, y un proxy_set_header x-flowsery-real-ip que transporta la IP real del visitante a través del salto del proxy para que Flowsery resuelva la geolocalización del visitante y no la de tu servidor.

1. Configuración principal de Nginx

Agrega estos bloques location (normalmente en /etc/nginx/sites-available/your-site o /etc/nginx/conf.d/your-site.conf):

Nginx
# Proxy the analytics script
location /js/main.js {
    proxy_pass https://cdn.flowsery.com/main.js;
    proxy_set_header Host cdn.flowsery.com;
 
    # Cache the script for 1 year
    proxy_cache_valid 200 1y;
    add_header Cache-Control "public, max-age=31536000";
    expires 1y;
}
 
# Proxy the event collection endpoint + forward real visitor IP
location /api/track {
    proxy_pass https://analytics.flowsery.com/analytics/events;
    proxy_set_header Host analytics.flowsery.com;
 
    # CRITICAL: forwards the real visitor IP to the analytics backend.
    # Without this, every visitor resolves to your server's location.
    proxy_set_header x-flowsery-real-ip $remote_addr;
 
    # Standard forwarding (kept for compatibility with other consumers)
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
 
    # Allow POST requests
    proxy_pass_request_body on;
}

Si ejecutas Nginx detrás de Cloudflare (u otro edge), $remote_addr será la IP del edge del CDN, no la del visitante. Usa en su lugar el encabezado de IP real del CDN:

Nginx
# Behind Cloudflare — the visitor IP is in $http_cf_connecting_ip
proxy_set_header x-flowsery-real-ip $http_cf_connecting_ip;
 
# Behind Vercel / Fly.io / a generic L7 proxy
# proxy_set_header x-flowsery-real-ip $http_x_real_ip;

Nota: Si tu servidor ya sirve /api/track, elige otra ruta e indícasela al tracker con data-api="/flowsery-events".

2. Opcional: habilitar caché para el script

Nginx
# At the top of your nginx.conf (http {} block)
proxy_cache_path /var/cache/nginx/flowsery_cache levels=1:2 keys_zone=flowsery_cache:10m max_size=10g inactive=60m use_temp_path=off;
 
# In your server {} block, augment the /js/main.js location
location /js/main.js {
    proxy_cache flowsery_cache;
    proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
    proxy_cache_valid 200 1y;
    proxy_cache_bypass $http_pragma;
    proxy_cache_revalidate on;
    # ...rest of the config from step 1
}

3. Modifica la etiqueta del script

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

HTML
<script defer data-fl-website-id="flid_******" src="/js/main.js"></script>
Terminal
sudo nginx -t           # validate config
sudo systemctl reload nginx

Confirmar que funciona

  1. Abre tu sitio en una pestaña normal del navegador.
  2. En DevTools, ve a Network y filtra por /api/track.
  3. Confirma que las solicitudes van a tu propio dominio.
  4. En tu panel de Flowsery, comprueba que los países de los visitantes reflejan a tu audiencia y no la región de tu hosting.

Solución de problemas

Todos los visitantes aparecen desde la misma ubicación

El proxy está reenviando eventos, pero no la IP real del visitante. x-flowsery-real-ip falta o está enviando la IP de tu servidor en lugar de la del visitante.

  • Confirma que la línea proxy_set_header x-flowsery-real-ip <value> está presente en /api/track y que el valor apunta a la variable correcta para tu configuración edge ($remote_addr para tráfico directo, $http_cf_connecting_ip para Cloudflare, $http_x_real_ip para un edge L7 genérico).
  • Si Nginx está detrás de otro proxy, no uses $remote_addr: esa es la IP del proxy ascendente, no la del visitante. Usa el encabezado que inyecta el proxy ascendente.