Suporte/Guias de proxy
Guias de proxy

Proxy do Flowsery Analytics com FastAPI

Encaminhe o Flowsery Analytics através do seu servidor FastAPI para evitar interferência de bloqueadores de anúncios e capturar dados de visitantes mais precisos.

1. Instalar dependências

Terminal
pip install fastapi uvicorn httpx

2. Configurar o proxy

Adicione o seguinte à sua aplicação FastAPI:

Python
from fastapi import FastAPI, Request
from fastapi.responses import Response
import httpx
 
app = FastAPI()
 
def get_client_ip(request: Request) -> str:
    """Resolve the actual visitor IP address"""
    # Prefer Cloudflare's CF-Connecting-IP if available
    if cf_connecting_ip := request.headers.get("cf-connecting-ip"):
        return cf_connecting_ip
 
    # Then X-Real-IP
    if x_real_ip := request.headers.get("x-real-ip"):
        return x_real_ip
 
    # Fall back to X-Forwarded-For (first entry)
    if x_forwarded_for := request.headers.get("x-forwarded-for"):
        return x_forwarded_for.split(",")[0].strip()
 
    # Last resort: direct connection host
    return request.client.host if request.client else ""
 
@app.get("/js/main.js")
async def proxy_script():
    async with httpx.AsyncClient() as client:
        response = await client.get('https://cdn.flowsery.com/main.js')
        return Response(
            content=response.content,
            media_type='application/javascript',
            headers={
                'Cache-Control': 'public, max-age=31536000'
            }
        )
 
@app.post("/api/track")
async def proxy_events(request: Request):
    body = await request.json()
 
    # Determine the origin from the request or construct it from the base URL
    origin = request.headers.get('origin') or str(request.base_url).rstrip('/')
 
    # Resolve visitor IP for accurate geolocation
    client_ip = get_client_ip(request)
 
    async with httpx.AsyncClient() as client:
        headers = {
            'Content-Type': 'application/json',
            'User-Agent': request.headers.get('user-agent'),
            'Origin': origin,
            'x-forwarded-for': client_ip
        }
 
        if client_ip:
            # CRITICAL: Flowsery reads this as the authoritative visitor IP. Without it, every visitor resolves to your server's region.
            headers['x-flowsery-real-ip'] = client_ip
 
        response = await client.post(
            'https://analytics.flowsery.com/analytics/events',
            json=body,
            headers=headers
        )
        return Response(
            content=response.content,
            media_type='application/json',
            status_code=response.status_code
        )
 
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

Nota: Se a sua aplicação já tiver um endpoint /api/track, use o atributo data-api na 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á a ser 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. Se o FastAPI estiver atrás de outro proxy (Cloudflare, Vercel, etc.), request.client.host será o proxy a montante. Leia antes cf-connecting-ip ou x-real-ip.

3. 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>

4. Fazer deploy

Depois de fazer deploy do seu servidor, a configuração do proxy é ativada automaticamente.

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