Suporte/Guias de proxy
Guias de proxy

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:

Terminal
php artisan make:controller FlowseryProxyController

2. Implementar a lógica do proxy

Adicione o seguinte a app/Http/Controllers/FlowseryProxyController.php:

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:

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:

HTML
<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:

  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 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').