Zum Inhalt
NEXVIEW

Betrieb · Kapitel 13

Hinter einem Proxy.

Nexview spricht innen einfaches HTTP. Wer es von unterwegs erreichen will, stellt einen Proxy mit https davor, oder nimmt ein VPN in sein Netz, was die sicherere Wahl ist. Mit eigener Adresse, etwa https://nexview.example.com, braucht Nexview gar keine Einstellung. Dieses Kapitel zeigt die drei Dinge, die sich lohnen: einen Unterpfad, einen Proxy, dem Nexview glaubt, und die richtige öffentliche Adresse.

Erst das Konto, dann freigeben

Lege das Konto aus dem Einrichtungsassistenten aus deinem eigenen Netz an. Erst danach leitest du einen Port weiter, denn solange es kein Konto gibt, kann jeder, der die Seite öffnen kann, den Assistenten durchlaufen. Wer Nexview vor dem ersten Login offen ins Netz hängt, hat unabhängig von allem anderen ein Problem.

Unter einem Unterpfad

Statt einer eigenen Subdomain kann Nexview unter dem Pfad einer gemeinsamen Domain laufen, etwa https://example.com/nexview/. Dafür trägst du eine Variable in den environment-Block der Compose-Datei ein und startest den Container neu:

docker-compose.yml, environment
NEXVIEW_URL_BASE: /nexview

Jeder Pfad geht, auch /tools/nexview. Ist die Variable leer, läuft alles wie bisher. Mit gesetztem Pfad beantwortet Nexview jede Adresse doppelt, mit und ohne Vorbau. Das ist nötig, weil Proxys auf zwei Arten eingestellt sind: Die einen reichen den Pfad unverändert durch (das ist die empfohlene Einstellung), die anderen schneiden ihn vorher ab. Außerdem rufen der Docker-Healthcheck und die Webhooks von Radarr und Sonarr den Server direkt an der Wurzel an. Der Wert wird beim Einlesen aufgeräumt: Ein führender Schrägstrich wird ergänzt, ein abschließender entfernt. /api ist als Vorbau verboten, er fiele mit der Schnittstelle zusammen.

Fertige Beispiele für die vier verbreiteten Proxys:

nginx.conf, Server-Block
location /nexview {
    proxy_pass http://127.0.0.1:5173;
    proxy_set_header Host $host;
}
Caddyfile, im Site-Block
handle /nexview* {
    reverse_proxy 127.0.0.1:5173
}

handle_path, das den Pfad abschneidet, geht genauso.

Labels am Nexview-Container (Traefik)
- traefik.http.routers.nexview.rule=PathPrefix(`/nexview`)
- traefik.http.services.nexview.loadbalancer.server.port=8000

Eine stripprefix-Middleware geht ebenso. Bei Nginx Proxy Manager legst du am Proxy-Host eine „Custom Location“ /nexview an und leitest sie an Rechner und Port von Nexview weiter. Mehr braucht es nicht, keine Advanced-Einstellungen.

Gut zu wissenTrag die öffentliche Adresse mit dem Unterpfad ein. Unter „Einstellungen › System › Adresse“ muss sie https://example.com/nexview lauten. Sie steckt in jedem Link, den Nexview verschickt, in Einladungen und in Mails zum Zurücksetzen des Passworts. Nexview schlägt sie richtig vor und warnt, wenn der Unterpfad fehlt, kann aber nicht verhindern, dass du ohne ihn speicherst.

Dem Proxy trauen

Hinter einem Proxy, der TLS beendet, kommt die Anfrage bei Nexview als http an. Jede Adresse, die Nexview daraus baut, wäre eine http-Adresse, etwa die Rückleitadresse der Anmeldung über einen Anbieter. Und alle Anfragen sehen aus, als kämen sie von derselben Adresse, nämlich der des Proxys. Zwei Einstellungen kümmern sich darum, eine für das Schema und die Adresse, eine für das Cookie.

NEXVIEW_CLIENT_IP

Das ist die Einstellung für vertraute Proxys. Sie sagt Nexview, wie es an die Adresse dessen kommt, der anfragt, und ob es dem Schema aus X-Forwarded-Proto glauben darf. Gelesen wird der Kopf nur, wenn hier ein Proxy steht. Ohne die Einstellung ignoriert Nexview ihn, denn er lässt sich genauso fälschen wie X-Forwarded-For.

WertWann
leerDu bist nicht sicher. Es zählt nur das Konto. Das ist ab Werk so und immer sicher.
directNexview hängt direkt am Netz, kein Proxy davor.
proxyGenau ein Reverse Proxy davor: Nginx, Caddy, Nginx Proxy Manager, Traefik.
proxy:2Zwei davor, zum Beispiel Cloudflare und dahinter ein eigener.

Der Proxy muss X-Forwarded-For und X-Forwarded-Proto weiterreichen. Nginx Proxy Manager, Caddy und Traefik tun das von selbst. Mit der Einstellung nimmt Nexview den rechtesten Wert, den, den dein nächster Proxy angehängt hat, und nur http oder https. Bei proxy:2 ist das das Schema, das die Anfrage hatte, als sie bei diesem Proxy ankam, nicht unbedingt das des Browsers.

Gut zu wissenLass die Einstellung leer, wenn du nicht sicher bist. Steht dort direct, obwohl ein Proxy davorsteht, sehen alle Anfragen aus wie dieselbe Adresse, und ein einziger Vertipper sperrt den ganzen Haushalt aus.

Die Anmeldung steckt in einem HttpOnly-Cookie. Der Browser schickt es von selbst zurück, und kein Skript auf der Seite kann es lesen. Ob es zusätzlich das Merkmal Secure trägt, also nur über https reist, entscheidet diese Variable.

WertWann
autoAb Werk. Secure, wenn die Anfrage über https kam. Geht überall, auch über http.
onImmer setzen. Für einen Proxy, der https beendet und intern http weiterreicht, wenn du Nexview nicht mit NEXVIEW_CLIENT_IP=proxy von ihm erzählt hast.
offNie setzen.

Mit NEXVIEW_CLIENT_IP=proxy folgt auto dem Schema des Proxys, und das Cookie wird Secure, sobald der Wert https ist. Beendet dagegen ein äußerer Proxy https und reicht nach innen http weiter, stell NEXVIEW_COOKIE_SECURE=on. Dasselbe gilt für das kurzlebige Cookie einer Anmeldung über einen Anbieter, das die zehn Minuten beim Anbieter überbrückt.

Gut zu wissenStell on nicht, wenn Nexview auch über http:// erreichbar sein soll. Ein Browser wirft ein sicheres Cookie, das über http kommt, weg, und dann kommt niemand mehr hinein.

Zwei Einzelheiten für Fortgeschrittene. Der Server im Abbild liest X-Forwarded-Proto ab Werk von Absendern auf dem Rechner selbst, etwa einem Proxy daneben im Host-Netzwerk. Und die Variable gilt für das Schema, nie für den Host, der kommt aus dem Host-Kopf, wie der Proxy ihn weitergibt.

Die öffentliche Adresse

Unter „Einstellungen › System › Adresse“ steht die Adresse, die deine Leute im Browser eingeben. Einladungen, Mails, Anbieter und Links nutzen sie, und die Rückleitadresse der Anmeldung wird daraus gebaut. Ändert sie sich später, fragt Nexview zuerst, wenn ein Anbieter die alte noch kennt. Die „Adresse aus Sicht von Radarr/Sonarr“ steht auf derselben Seite. Sie ist nur nötig, wenn die öffentliche Adresse für den Rückkanal nichts taugt, etwa im Docker-Netz oder wenn ein Anmeldeschutz oder ein selbstsigniertes Zertifikat davorhängt.

Inhaltsregeln der Seite

Nexview sagt deinem Browser, woher er laden und wohin er senden darf. Alles andere lehnt er ab. Das wichtigste Ergebnis: Kein Skript auf der Seite kann Daten an eine andere Adresse als die von Nexview schicken. Du brauchst daran in der Regel nichts zu ändern. Für drei Fälle gibt es Schalter:

VariableWerteWann
NEXVIEW_CSPon (ab Werk), report-only, offreport-only meldet Verstöße in der Browser-Konsole, ohne etwas zu blockieren, gut zum Hinsehen. off schaltet die Kopfzeile ganz ab.
NEXVIEW_FRAME_ANCESTORSnone (ab Werk), self oder eine AdresseWenn du Nexview in ein Brett wie Organizr einbettest. Ohne die Einstellung bleibt der Rahmen leer, und zwar ohne jede Fehlermeldung.
NEXVIEW_IMG_SOURCESAdressen, mit Leerzeichen getrenntWenn die Poster im Kalender leer bleiben.

Zu den Postern: Kalenderposter baut Nexview nicht selbst, es reicht die Adresse durch, die Radarr oder Sonarr gespeichert haben, und die hängt an deinem Metadatenanbieter. Die üblichen (TMDB, TheTVDB, fanart.tv) sind schon erlaubt. Nimmt deiner einen anderen, erscheinen die Poster nicht, der Browser sagt es nur in seiner Konsole. NEXVIEW_IMG_SOURCES=https://bilder.example.org behebt das.

Was https sonst noch bringt

Web Push funktioniert nur über https. Auf dem iPhone und iPad kommt dazu, dass Nexview auf dem Home-Bildschirm liegen muss. Beides steht im Kapitel Benachrichtigungen.

Als Nächstes geht es um Sicherungen und Updates: Sicherungen und Updates. Alle Umgebungsvariablen auf einen Blick stehen auf der Seite Selbst hosten.