Suporte/Guias de proxy
Guias de proxy

Proxy do Flowsery Analytics com PHP

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

1. Criar os endpoints de proxy

Configure dois ficheiros PHP para tratarem os pedidos com proxy:

script.php

PHP
<?php
header('Content-Type: application/javascript');
header('Cache-Control: public, max-age=31536000');
 
$ch = curl_init('https://cdn.flowsery.com/main.js');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$script = curl_exec($ch);
curl_close($ch);
 
echo $script;
PHP
<?php
header('Content-Type: application/json');
 
// Resolve the real visitor IP
function getClientIp() {
    if (!empty($_SERVER['HTTP_CF_CONNECTING_IP'])) {
        return $_SERVER['HTTP_CF_CONNECTING_IP'];
    }
    if (!empty($_SERVER['HTTP_X_REAL_IP'])) {
        return $_SERVER['HTTP_X_REAL_IP'];
    }
    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        return trim($ips[0]);
    }
    return $_SERVER['REMOTE_ADDR'] ?? '';
}
 
// Determine the origin from request headers or build it from server variables
$origin = $_SERVER['HTTP_ORIGIN'] ??
    ($_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'];
 
$clientIp = getClientIp();
 
$requestHeaders = [
    'Content-Type: application/json',
    'User-Agent: ' . $_SERVER['HTTP_USER_AGENT'],
    'Origin: ' . $origin,
    'x-forwarded-for: ' . $clientIp,
];
 
if (!empty($clientIp)) {
    // CRITICAL: Flowsery reads this as the authoritative visitor IP. Without it, every visitor resolves to your server's region.
    $requestHeaders[] = 'x-flowsery-real-ip: ' . $clientIp;
}
 
$ch = curl_init('https://analytics.flowsery.com/analytics/events');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents('php://input'));
curl_setopt($ch, CURLOPT_HTTPHEADER, $requestHeaders);
$response = curl_exec($ch);
curl_close($ch);
 
echo $response;

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

2. Configurar o routing no servidor web

Apache (.htaccess)

APACHE
RewriteEngine On
RewriteRule ^js/script\.js$ script.php [L]
RewriteRule ^api/events$ events.php [L]
Nginx
location /js/main.js {
    try_files $uri $uri/ /script.php?$query_string;
}
 
location /api/track {
    try_files $uri $uri/ /events.php?$query_string;
}

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 das suas alterações, 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 PHP estiver atrás de outro proxy (Cloudflare, Vercel, etc.), $_SERVER['REMOTE_ADDR'] será o proxy a montante. Leia antes $_SERVER['HTTP_CF_CONNECTING_IP'] ou $_SERVER['HTTP_X_REAL_IP'].