Unterstützung/Proxy-Anleitungen
Proxy-Anleitungen

Flowsery Analytics mit Flask proxyen

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

1. Abhängigkeiten installieren

Terminal
pip install flask requests

2. Proxy einrichten

Fügen Sie die folgenden Routen und die Hilfsfunktion zu Ihrer Flask-App hinzu:

Python
from flask import Flask, request, Response
import requests
 
app = Flask(__name__)
 
 
def get_client_ip():
    """
    Determine the actual visitor IP address.
    When behind Cloudflare, prefer CF-Connecting-IP. Then X-Real-IP.
    Then X-Forwarded-For's first entry. Finally fall back to request.remote_addr.
    """
    cf_ip = request.headers.get("CF-Connecting-IP")
    if cf_ip:
        return cf_ip
    real_ip = request.headers.get("X-Real-IP")
    if real_ip:
        return real_ip
    xff = request.headers.get("X-Forwarded-For")
    if xff:
        # Comma-separated list: "client, proxy1, proxy2"
        parts = [ip.strip() for ip in xff.split(",")]
        if parts:
            return parts[0]  # the leftmost entry is the original client
    return request.remote_addr
 
 
@app.route("/js/main.js")
def proxy_script():
    response = requests.get("https://cdn.flowsery.com/main.js")
    return Response(
        response.content,
        content_type="application/javascript",
        headers={"Cache-Control": "public, max-age=31536000"},
    )
 
 
@app.route("/api/track", methods=["POST"])
def proxy_events():
    # Copy incoming headers but omit those that should match the target
    excluded = {"host", "content-length"}
    headers = {
        key: value
        for key, value in request.headers.items()
        if key.lower() not in excluded
    }
 
    # The Origin header is required by the Flowsery Analytics API
    if "Origin" not in headers:
        scheme = request.scheme
        host = request.host
        headers["Origin"] = f"{scheme}://{host}"
 
    # Attach the real visitor IP for accurate geolocation
    client_ip = get_client_ip()
    headers["x-forwarded-for"] = client_ip
    if client_ip:
        # CRITICAL: Flowsery reads this as the authoritative visitor IP. Without it, every visitor resolves to your server's region.
        headers["x-flowsery-real-ip"] = client_ip
 
    # Forward the request body and headers to Flowsery Analytics
    response = requests.post(
        "https://analytics.flowsery.com/analytics/events",
        data=request.get_data(),
        headers=headers,
        timeout=5,
    )
 
    # Return the upstream response to the browser
    return Response(
        response.content,
        status=response.status_code,
        content_type=response.headers.get("Content-Type", "application/json"),
    )

Hinweis: Wenn Ihre Anwendung bereits einen Endpunkt /api/track hat, verwenden Sie das Attribut data-api im Flowsery-Analytics-Skript, um Events an einen anderen Pfad zu senden. Zum Beispiel leitet data-api="/flowsery-events" Daten stattdessen an /flowsery-events.

Wichtig: Wenn im Dashboard jeder Besucher aus demselben Ort zu kommen scheint, prüfen Sie, ob x-flowsery-real-ip beim Weiterleiten an den Flowsery-Analytics-Endpunkt /events auf die echte Besucher-IP gesetzt wird und nicht auf die IP des Proxy-Servers.

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

4. Deploy

Nach dem Deploy Ihres Servers 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 Flask hinter einem weiteren Proxy läuft (Cloudflare, Vercel usw.), ist request.remote_addr die IP dieses Upstream-Proxys - lesen Sie stattdessen direkt request.headers.get('CF-Connecting-IP') oder request.headers.get('X-Real-IP').