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):
# 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:
# 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
# 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:
<script defer data-fl-website-id="flid_******" src="/js/main.js"></script>sudo nginx -t # validate config
sudo systemctl reload nginxConfirmar que funciona
- Abre tu sitio en una pestaña normal del navegador.
- En DevTools, ve a Network y filtra por
/api/track. - Confirma que las solicitudes van a tu propio dominio.
- 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/tracky que el valor apunta a la variable correcta para tu configuración edge ($remote_addrpara tráfico directo,$http_cf_connecting_ippara Cloudflare,$http_x_real_ippara 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.