Proxy do Flowsery Analytics com Laravel
Encaminhe o Flowsery Analytics através da sua aplicação Laravel para evitar interferência de bloqueadores de anúncios e capturar dados de visitantes mais precisos.
1. Gerar o controller do proxy
Crie um controller dedicado para tratar pedidos de proxy:
php artisan make:controller FlowseryProxyController2. Implementar a lógica do proxy
Adicione o seguinte a app/Http/Controllers/FlowseryProxyController.php:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Cache;
class FlowseryProxyController extends Controller
{
public function script()
{
// Cache the tracking script for 1 day
return Cache::remember('flowsery_script', 86400, function () {
$response = Http::get('https://cdn.flowsery.com/main.js');
return response($response->body(), 200, [
'Content-Type' => 'application/javascript',
'Cache-Control' => 'public, max-age=86400'
]);
});
}
public function events(Request $request)
{
// Determine the origin from the request or build it from the URL
$origin = $request->header('Origin') ?? $request->getSchemeAndHttpHost();
// Resolve the real visitor IP for accurate geolocation
$clientIp = $request->header('CF-Connecting-IP')
?? $request->header('X-Real-IP')
?? $request->header('X-Forwarded-For')
?? $request->ip();
if (str_contains($clientIp, ',')) {
$clientIp = trim(explode(',', $clientIp)[0]);
}
$headers = [
'User-Agent' => $request->header('User-Agent'),
'Content-Type' => 'application/json',
'Origin' => $origin,
'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.
$headers['x-flowsery-real-ip'] = $clientIp;
}
$response = Http::withHeaders($headers)
->post('https://analytics.flowsery.com/analytics/events', $request->all());
return response($response->body(), $response->status());
}
}Nota: Se a sua aplicação já tiver 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.
3. Registar as rotas
Adicione o seguinte a routes/web.php:
Route::get('/js/main.js', [FlowseryProxyController::class, 'script']);
Route::post('/api/track', [FlowseryProxyController::class, 'events']);4. 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>5. Fazer deploy
Depois de fazer deploy da sua aplicação, 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 Laravel estiver atrás de outro proxy (Cloudflare, Vercel, etc.),
$request->ip()será o proxy a montante. Leia antes$request->header('CF-Connecting-IP')ou$request->header('X-Real-IP').