X-Real-IP
Ich wollte für eine Webseite eine einfache Tracking-Software ausrollen. Umami hat mir da am besten gefallen. Im microK8s Cluster kann man das ganz einfach und schnell ausrollen.
Den Cluster will ich nicht direkt exposen, dafür habe ich einen Reverse-Proxy auf basis Caddy installiert. So kann ich bestimmen, wo was exposed wird.
Tracking Infos sind relativ schnell angekommen. Doch die Länderauflösung hat nicht funktioniert. Die Webseitenbesucher kamen alle von “Unknown”. Auflösung der Länder wird meist auf IP-Basis gemacht.
Also zuerst mal die Doku studiert und gesehen, dass Caddy im reverse-proxy
Modus werden eigentlich alle X-* Headers
korrekt gesetzt.
Gelesen habe ich noch, dass X-Real-IP Header selber gesetzt werden soll:
header_up X-Real-IP {remote_host}
Doch leider hat das nichts gebracht. Also Logs konsultieren, was auf dem
microK8s am schnellsten mit observability und demzufolge Grafana geht:
microk8s enable observability
Einloggen auf Grafana und mit Explore Loki konsultieren.
{namespace="ingress"} |= `umami` | pattern `<ip> - - <_> "<method> <_> <_>" <status> <_> <_> "<_>" <_>` | line_format `{{.ip}}`
Komischerweise sind da also noch alle DMZ Ips drin.
Irgendwann kam mir die Idee, dass der Ingress im microK8s den Header von Caddy nicht konsumiert. Kleine Recherche online hat ergeben, dass man im microK8s der Ingress auf Basis von nginx den Header akzeptieren muss:
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-load-balancer-microk8s-conf
namespace: ingress
data:
use-forwarded-headers: "true"
Nur noch ein apply und der remote_host von Caddy wird korrekt auf Umami weitergeleitet.