
Plausible Analytics - Eigene Besuche mit dynamischer IP ausschließen
Vermeide unerwünschtes Tracking: So schließt du bestimmte IPs vom Plausible-Tracking aus – auch bei dynamischen Adressen!
Du betreibst Plausible Analytics in einem Docker-Container und nutzt den NGINX Proxy Manager als Reverse Proxy? Dann kannst du gezielt bestimmte Besucher – z. B. dich selbst oder interne Testnutzer – vom Tracking ausschließen. In diesem Beitrag zeige ich dir, wie du mit einer Kombination aus DynDNS, IP-Auflösung und einem kleinen NGINX-Trick das Tracking für dynamische IPs effektiv unterbindest.
Motivation
Wenn du Plausible Analytics selbst hostest – z. B. in einem Docker-Setup hinter dem NGINX Proxy Manager – willst du vermutlich nicht deine eigenen Seitenaufrufe mittracken.
Das Problem: Viele von uns surfen zuhause mit einer dynamischen IP-Adresse. Statische IPs kosten extra oder sind gar nicht verfügbar. Wie kannst du trotzdem zuverlässig deine eigene Verbindung vom Tracking ausschließen?
Die Lösung: Nutze einen DynDNS-Dienst (z. B. meinname.dyndns.org
), der deine aktuelle IP immer aktuell hält – und konfiguriere NGINX Proxy Manager so, dass Zugriffe von dieser IP nicht mehr auf /js/script.js
und /api/event
zugreifen können.
Voraussetzungen
- Du betreibst Plausible Analytics als Docker-Container
- Du nutzt den NGINX Proxy Manager (ebenfalls als Docker-Container)
- Du hast Zugriff auf den Host, auf dem beide Container laufen
- Du nutzt einen DynDNS-Dienst, z. B. DuckDNS, No-IP, DynDNS
Schritt-für-Schritt Anleitung
1. DynDNS-IP regelmäßig auflösen (vom Host aus)
Da nginx-proxy-manager
in einem Container läuft, muss die Datei mit der geblockten IP auf dem Host erzeugt und dann per Docker Volume in den Container gemountet werden.
Installiere alle benötigten Pakete:
sudo apt install dnsutils
Erstelle ein Shell-Script auf dem Host und passe den DNS-Namen DYNDNS_HOST
und den NPM Containernamen NGINX_CONTAINER
auf deine Gegebenheiten an:
#!/bin/bash
# Configuration
DYNDNS_HOST="meinname.dyndns.org"
OUTFILE="/opt/nginx-blocked-ip/blocked-ip.conf"
IPFILE="/opt/nginx-blocked-ip/last-ip.txt"
NGINX_CONTAINER="proxy-npm-1"
LOGGER_TAG="update-blocked-ip"
# Ensure target directory exists
mkdir -p "$(dirname "$OUTFILE")"
# Retrieve current IP from DynDNS
CURRENT_IP=$(dig +short "$DYNDNS_HOST" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -n1)
# Handle error if IP is empty
if [ -z "$CURRENT_IP" ]; then
logger -t "$LOGGER_TAG" "Error: Could not resolve IP for $DYNDNS_HOST."
exit 1
fi
# Read previous IP
if [ -f "$IPFILE" ]; then
LAST_IP=$(cat "$IPFILE")
else
LAST_IP=""
fi
# Check if IP has changed
if [ "$CURRENT_IP" != "$LAST_IP" ]; then
logger -t "$LOGGER_TAG" "IP changed: $LAST_IP → $CURRENT_IP"
# Write new IP to file
echo "$CURRENT_IP" > "$IPFILE"
# Write config file in correct format
echo "deny $CURRENT_IP;" > "$OUTFILE"
# Reload NGINX inside the container
if docker exec "$NGINX_CONTAINER" nginx -s reload >/dev/null 2>&1; then
logger -t "$LOGGER_TAG" "NGINX config reloaded successfully inside container '$NGINX_CONTAINER'."
else
logger -t "$LOGGER_TAG" "Error reloading NGINX config inside container '$NGINX_CONTAINER'."
fi
else
logger -t "$LOGGER_TAG" "No change detected. Current IP remains $CURRENT_IP."
fi
Speichere es z. B. als: /usr/local/bin/update-blocked-ip.sh
und mache es ausführbar:
sudo chmod +x /usr/local/bin/update-blocked-ip.sh
Lege einen Cronjob an (alle 5 Minuten):
# Write current DynDNS address to /opt/nginx-blocked-ip/blocked-ip.txt
*/5 * * * * /usr/local/bin/update-blocked-ip.sh
Beispielinhalt der Datei /opt/nginx-blocked-ip/blocked-ip.conf
:
deny 91.230.22.26;
2. Volume-Mount zur NGINX Proxy Manager Instanz
Bearbeite deinen docker-compose.yml
oder docker run
für den nginx-proxy-manager und füge ein Volume hinzu:
nginx-proxy-manager:
image: jc21/nginx-proxy-manager:latest
ports:
- "80:80"
- "443:443"
volumes:
- ...
- /opt/nginx-blocked-ip:/etc/nginx/custom-deny:ro
- ...
Wichtig:
/opt/nginx-blocked-ip
ist auf dem Host und wird read-only im Container unter/etc/nginx/custom-deny
gemountet
Anschließend docker-compose up -d
ausführen (alternativ den Container neu starten).
3. NGINX Proxy Host konfigurieren
- Öffne die Web-GUI von NGINX Proxy Manager
- Gehe zu „Proxy Hosts“ → Bearbeite den Eintrag für
plausible.yourdomain.tld
. - Wechsle zum Reiter „Custom locations“ und füge eine neue Location hinzu.
- Gib im Feld Location den Pfad
/js/script.js
ein. - Klicke auf das Zahnradsymbol, um die erweiterten Einstellungen zu öffnen, und füge im Bereich Advanced folgenden Inhalt ein:
include /etc/nginx/custom-deny/blocked-ip.conf;
allow all;
- Trage im Abschnitt Scheme, Forward Hostname / IP und Forward Port* exakt die gleichen Werte ein wie im Tab Details.
Damit wird der Zugriff auf Tracking-Skript und Event-Endpunkt verwehrt, wenn die aufgelöste DynDNS-IP mit der Client-IP übereinstimmt.
🔥 Das funktioniert, weil
include
imlocation
erlaubt ist, unddeny
darin ausgeführt wird. Dasallow all;
stellt sicher, dass alle anderen IPs weiterkommen.
4. Testen
- Besuche deine Website von einem Gerät, das über deine DynDNS-IP verbunden ist
- Öffne die Entwicklertools (Netzwerk-Tab)
- Prüfe, ob
script.js
undapi/event
mit HTTP 403 Forbidden blockiert werden - Öffne dein Plausible-Dashboard → Du solltest nicht auftauchen
Abschluss
Damit ist das Tutorial zu “Plausible Analytics - Eigene Besuche mit dynamischer IP ausschließen” abgeschlossen. Wenn Sie Fragen haben, senden Sie eine Mail an ralf.kirchner@ksite.de