Unterstützung/Proxy-Anleitungen
Proxy-Anleitungen

Flowsery Analytics mit Laravel proxyen

Leiten Sie Flowsery Analytics über Ihre Laravel-Anwendung weiter, um Störungen durch Adblocker zu vermeiden und genauere Besucherdaten zu erfassen.

1. Proxy-Controller generieren

Erstellen Sie einen dedizierten Controller für Proxy-Requests:

Terminal
php artisan make:controller FlowseryProxyController

2. Proxy-Logik implementieren

Fügen Sie Folgendes zu app/Http/Controllers/FlowseryProxyController.php hinzu:

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());
    }
}

Hinweis: Wenn Ihre Anwendung bereits eine Route /api/track hat, fügen Sie dem Flowsery-Analytics-Skript data-api hinzu, um Events an einen anderen Pfad zu senden. Zum Beispiel sendet data-api="/flowsery-events" Daten stattdessen an /flowsery-events.

3. Routen registrieren

Fügen Sie Folgendes zu routes/web.php hinzu:

PHP
Route::get('/js/main.js', [FlowseryProxyController::class, 'script']);
Route::post('/api/track', [FlowseryProxyController::class, 'events']);

4. Skript-Tag anpassen

Ersetzen Sie das ursprüngliche Flowsery-Analytics-Snippet durch die geproxyte Variante:

HTML
<script defer data-fl-website-id="flid_******" src="/js/main.js"></script>

5. Deploy

Nach dem Deploy Ihrer Anwendung wird die Proxy-Konfiguration automatisch aktiv.

Prüfen, ob es funktioniert

So validieren Sie das Proxy-Setup:

  1. Öffnen Sie Ihre Website.
  2. Öffnen Sie die Entwicklerwerkzeuge Ihres Browsers und wechseln Sie zum Tab "Network".
  3. Prüfen Sie, ob Analytics-Requests über Ihre Domain statt über analytics.flowsery.com ausgeliefert werden.

Fehlerbehebung

Jeder Besucher scheint aus demselben Ort zu kommen

Wenn alle Besucher aus einer einzigen geografischen Region erscheinen (typischerweise aus der Region Ihres Servers), leitet der Proxy die echte Besucher-IP nicht korrekt weiter.

Lösung:

  1. Stellen Sie sicher, dass Ihr Proxy den Header x-flowsery-real-ip mit der tatsächlichen Besucher-IP enthält und nicht mit der Server-IP, wenn Requests an den Flowsery-Analytics-Endpunkt /events weitergeleitet werden.
  2. Wenn Laravel hinter einem weiteren Proxy läuft (Cloudflare, Vercel usw.), ist $request->ip() die IP dieses Upstream-Proxys - lesen Sie stattdessen direkt $request->header('CF-Connecting-IP') oder $request->header('X-Real-IP').