Suporte/Guias de proxy
Guias de proxy

Proxy do Flowsery Analytics com Firebase Hosting

Encaminhe o Flowsery Analytics através do Firebase Hosting usando Cloud Functions para evitar interferência de bloqueadores de anúncios e capturar dados de visitantes mais precisos.

Nota: o Firebase Hosting não suporta nativamente rewrites de reverse proxy para destinos externos. Este guia usa Firebase Cloud Functions como alternativa.

1. Inicializar Firebase Functions (se ainda não estiver configurado)

Se o seu projeto ainda não inclui Firebase Functions, execute:

Terminal
firebase init functions

Siga os passos de configuração adequados ao seu ambiente. No final, existirá um diretório /functions no seu projeto.

2. Instalar dependências

Entre no diretório functions/ e instale os pacotes necessários:

Terminal
cd functions/
npm i -s express express-http-proxy

3. Construir a Cloud Function de reverse proxy

Crie ou atualize functions/index.js com o seguinte:

JavaScript
const { onRequest } = require('firebase-functions/v2/https');
const express = require('express');
const proxy = require('express-http-proxy');
 
const app = express();
 
app.set('trust proxy', true);
 
// Proxy the Flowsery Analytics tracking script
app.use(
  '/js/main.js',
  proxy('https://analytics.flowsery.com', {
    proxyReqPathResolver: () => '/js/main.js',
  })
);
 
// Proxy the event collection endpoint
app.use(
  '/api/track',
  proxy('https://analytics.flowsery.com', {
    proxyReqPathResolver: () => '/analytics/events',
    proxyReqOptDecorator: (proxyReqOpts, srcReq) => {
      // Forward the real visitor IP for accurate geolocation
      const clientIp =
        srcReq.headers['cf-connecting-ip'] || srcReq.headers['x-real-ip'] || srcReq.headers['x-forwarded-for']?.split(',')[0]?.trim() || srcReq.ip;
      proxyReqOpts.headers['x-forwarded-for'] = clientIp;
      if (clientIp) {
        // CRITICAL: Flowsery reads this as the authoritative visitor IP. Without it, every visitor resolves to your server's region.
        proxyReqOpts.headers['x-flowsery-real-ip'] = clientIp;
      }
      return proxyReqOpts;
    },
  })
);
 
exports.reverseProxy = onRequest(app);

Nota: Se o seu projeto já usa uma rota /api/track, adicione data-api à tag de script do Flowsery Analytics para encaminhar eventos para outro caminho. Por exemplo, data-api="/flowsery-events" envia os dados para /flowsery-events.

Importante: Se todos os visitantes aparecerem na mesma localização no seu painel, confirme que o cabeçalho x-flowsery-real-ip está definido com o IP real do visitante (e não com o IP do servidor proxy) ao encaminhar pedidos para o endpoint /events do Flowsery Analytics.

4. Configurar os rewrites do Firebase Hosting

Atualize firebase.json para encaminhar os caminhos correspondentes para a função reverseProxy:

JSON
{
  "hosting": {
    "public": "public",
    "ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
    "rewrites": [
      {
        "source": "/js/main.js",
        "function": "reverseProxy"
      },
      {
        "source": "/api/track",
        "function": "reverseProxy"
      }
    ]
  },
  "functions": [
    {
      "source": "functions",
      "codebase": "default",
      "ignore": ["node_modules", ".git", "firebase-debug.log", "firebase-debug.*.log", "*.local"]
    }
  ]
}

5. Modificar a tag de script

Substitua o snippet original do Flowsery Analytics pela versão com proxy:

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

6. Fazer deploy do Hosting e das Functions

Publique hosting e functions num único deploy:

Terminal
firebase deploy --only hosting,functions

Confirmar que funciona

Para validar que o proxy está a funcionar corretamente:

  1. Navegue até ao seu site
  2. Abra as ferramentas de desenvolvedor do navegador e mude para o separador Network
  3. Verifique que os pedidos de analytics são servidos a partir do seu domínio em vez de analytics.flowsery.com

Resolução de problemas

Todos os visitantes aparecem da mesma localização

Quando todos os visitantes mostram uma única localização geográfica (normalmente a região do seu servidor), o proxy não está a encaminhar corretamente os IPs reais dos visitantes.

Resolução:

  1. Garanta que o seu proxy inclui o cabeçalho x-flowsery-real-ip com o endereço IP real do visitante (e não o IP do servidor) ao encaminhar pedidos para o endpoint /events do Flowsery Analytics.
  2. Se a Cloud Function estiver atrás de outro proxy (Cloudflare, Vercel, etc.), srcReq.ip será o proxy a montante. Use diretamente cf-connecting-ip ou x-real-ip.