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
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
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)
RewriteEngine On
RewriteRule ^js/script\.js$ script.php [L]
RewriteRule ^api/events$ events.php [L]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:
<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:
- Navegue até ao seu site
- Abra as ferramentas de desenvolvedor do navegador e mude para o separador Network
- 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:
- Garanta que o seu proxy inclui o cabeçalho
x-flowsery-real-ipcom o endereço IP real do visitante (e não o IP do servidor) ao encaminhar pedidos para o endpoint/eventsdo Flowsery Analytics. - 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'].