Suporte/Guias de proxy
Guias de proxy

Proxy do Flowsery Analytics com Flask

Encaminhe o Flowsery Analytics através da sua aplicação Flask para evitar interferência de bloqueadores de anúncios e capturar dados de visitantes mais precisos.

1. Instalar dependências

Terminal
pip install flask requests

2. Configurar o proxy

Adicione as seguintes rotas e função auxiliar à sua aplicação Flask:

Python
from flask import Flask, request, Response
import requests
 
app = Flask(__name__)
 
 
def get_client_ip():
    """
    Determine the actual visitor IP address.
    When behind Cloudflare, prefer CF-Connecting-IP. Then X-Real-IP.
    Then X-Forwarded-For's first entry. Finally fall back to request.remote_addr.
    """
    cf_ip = request.headers.get("CF-Connecting-IP")
    if cf_ip:
        return cf_ip
    real_ip = request.headers.get("X-Real-IP")
    if real_ip:
        return real_ip
    xff = request.headers.get("X-Forwarded-For")
    if xff:
        # Comma-separated list: "client, proxy1, proxy2"
        parts = [ip.strip() for ip in xff.split(",")]
        if parts:
            return parts[0]  # the leftmost entry is the original client
    return request.remote_addr
 
 
@app.route("/js/main.js")
def proxy_script():
    response = requests.get("https://cdn.flowsery.com/main.js")
    return Response(
        response.content,
        content_type="application/javascript",
        headers={"Cache-Control": "public, max-age=31536000"},
    )
 
 
@app.route("/api/track", methods=["POST"])
def proxy_events():
    # Copy incoming headers but omit those that should match the target
    excluded = {"host", "content-length"}
    headers = {
        key: value
        for key, value in request.headers.items()
        if key.lower() not in excluded
    }
 
    # The Origin header is required by the Flowsery Analytics API
    if "Origin" not in headers:
        scheme = request.scheme
        host = request.host
        headers["Origin"] = f"{scheme}://{host}"
 
    # Attach the real visitor IP for accurate geolocation
    client_ip = get_client_ip()
    headers["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
 
    # Forward the request body and headers to Flowsery Analytics
    response = requests.post(
        "https://analytics.flowsery.com/analytics/events",
        data=request.get_data(),
        headers=headers,
        timeout=5,
    )
 
    # Return the upstream response to the browser
    return Response(
        response.content,
        status=response.status_code,
        content_type=response.headers.get("Content-Type", "application/json"),
    )

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 enviar eventos para outro caminho. Por exemplo, data-api="/flowsery-events" encaminha 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.

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

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 o Flask estiver atrás de outro proxy (Cloudflare, Vercel, etc.), request.remote_addr será o proxy a montante. Leia antes request.headers.get('CF-Connecting-IP') ou request.headers.get('X-Real-IP').