Nextcloud/Reverse proxy
Nextcloud/Reverse proxy - Kurzbeschreibung
Beschreibung
Nextcloud kann über einen Reverse Proxy betrieben werden, der statische Assets wie Bilder, CSS- oder JS-Dateien zwischenspeichern, die Last der HTTPS-Verarbeitung auf einen anderen Server verlagern oder einen Lastausgleich zwischen mehreren Servern herstellen kann.
Definition vertrauenswürdiger Proxies
Aus Sicherheitsgründen müssen Sie explizit die Proxy-Server definieren, denen Nextcloud vertrauen soll.
- Verbindungen von vertrauenswürdigen Proxys werden speziell behandelt, um die echten Client-Informationen für die Zugriffskontrolle und Protokollierung zu erhalten.
- Die Parameter werden in
config/config.php
konfiguriert
Legen Sie den Parameter trusted_proxies
als ein Array von fest:
- IPv4-Adressen
- IPv4-Bereiche in CIDR-Notation
- IPv6-Adressen
- IPv6-Bereiche in CIDR-Notation
um die Server festzulegen, denen Nextcloud als Proxyserver vertrauen soll.
- Dieser Parameter bietet Schutz gegen Client-Spoofing, und Sie sollten diese Server wie Ihren Nextcloud-Server absichern.
Ein Reverse-Proxy kann HTTP-Header mit der ursprünglichen Client-IP-Adresse definieren, und Nextcloud kann diese Header verwenden, um diese IP-Adresse abzurufen.
- Nextcloud verwendet standardmäßig den De-facto-Standard-Header "X-Forwarded-For", der jedoch mit dem Parameter forwarded_for_headers konfiguriert werden kann.
- Dieser Parameter ist ein Array von PHP-Lookup-Strings, zum Beispiel wird 'X-Forwarded-For' zu 'HTTP_X_FORWARDED_FOR'.
- Wenn dieser Parameter falsch gesetzt ist, kann es vorkommen, dass Clients ihre IP-Adresse als für Nextcloud sichtbar fälschen, selbst wenn sie durch den vertrauenswürdigen Proxy gehen! Der richtige Wert für diesen Parameter hängt von Ihrer Proxy-Software ab.
Überschreiben Sieparameters
Die automatische Erkennung von Hostname, Protokoll oder Webroot von Nextcloud kann in bestimmten Reverse-Proxy-Situationen fehlschlagen.
- Mit dieser Konfiguration kann die automatische Erkennung manuell überschrieben werden.
- Wenn Nextcloud den Hostnamen, das Protokoll oder die Webroot nicht automatisch erkennt, können Sie die Überschreibungsparameter in der
config/config.php
verwenden.
overwritehost
legt den Hostnamen des Proxys fest.- Sie können auch einen Port angeben.
overwriteprotocol
legt das Protokoll des Proxys fest.- Sie können zwischen den beiden Optionen http und https wählen.
overwritewebroot
setzt den absoluten Webpfad des Proxys auf den Nextcloud-Ordner.overwritecondaddr
überschreibt die Werte in Abhängigkeit von der Remote-Adresse.- Der Wert muss ein regulärer Ausdruck für die IP-Adressen des Proxys sein.
- Dies ist nützlich, wenn Sie einen Reverse-SSL-Proxy nur für den https-Zugang verwenden und die automatische Erkennung für den http-Zugang nutzen möchten.
overwrite.cli.url
die Basis-URL für alle URLs, die innerhalb von Nextcloud mit Hilfe von Kommandozeilen-Tools erzeugt werden.- Der hier eingestellte Wert wird zum Beispiel vom Benachrichtigungsbereich verwendet.
Lassen Sie den Wert leer oder lassen Sie den Parameter weg, um die automatische Erkennung beizubehalten.
DienstDiscovery
Die Weiterleitungen für CalDAV oder CardDAV funktionieren nicht, wenn Nextcloud hinter einem Reverse-Proxy läuft.
- Die empfohlene Lösung ist, dass Ihr Reverse-Proxy die Umleitungen vornimmt.
Apache2
RewriteEngine On RewriteRule ^/\.well-known/carddav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L] RewriteRule ^/\.well-known/caldav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L]
Traefik1
Docker-Labels verwenden:
traefik.frontend.redirect.permanent: 'true' traefik.frontend.redirect.regex: 'https://(.*)/.well-known/(?:card|cal)dav' traefik.frontend.redirect.replacement: 'https://$$1/remote.php/dav'
Verwendung von traefik.toml:
[frontends.frontend1.redirect] regex = "https://(.*)/.well-known/(?:card|cal)dav" replacement = "https://$1/remote.php/dav permanent = true
Danke an @pauvos und @mrtumnus für die Traefik-Beispiele.
Traefik2
Docker-Labels verwenden:
traefik.http.routers.nextcloud.middlewares: 'nextcloud_redirectregex' traefik.http.middlewares.nextcloud_redirectregex.redirectregex.permanent: true traefik.http.middlewares.nextcloud_redirectregex.redirectregex.regex: 'https://(.*)/.well-known/(?:card|cal)dav' traefik.http.middlewares.nextcloud_redirectregex.redirectregex.replacement: 'https://$${1}/remote.php/dav'
Verwendung einer TOML-Datei:
[http.middlewares] [http.middlewares.nextcloud-redirectregex.redirectRegex] permanent = true regex = "https://(.*)/.well-known/(?:card|cal)dav" replacement = "https://${1}/remote.php/dav"
HAProxy
acl url_discovery path /.well-known/caldav /.well-known/carddav http-request redirect location /remote.php/dav/ code 301 if url_discovery
NGINX
location /.well-known/carddav { return 301scheme://$host/remote.php/dav; } location /.well-known/caldav { return 301scheme://$host/remote.php/dav; }
oder
rewrite ^/\.well-known/carddav https://$server_name/remote.php/dav/ redirect; rewrite ^/\.well-known/caldav https://$server_name/remote.php/dav/ redirect;
Caddy
subdomain.example.com { redir /.well-known/carddav /remote.php/dav/ 301 redir /.well-known/caldav /remote.php/dav/ 301 reverse_proxy {$NEXTCLOUD_HOST:localhost} }
Beispiel
Mehrere Domains reverse SSLproxy
Wenn Sie auf Ihre Nextcloud-Installation http://domain.tld/nextcloudüber einen Multiple-Domains-Reverse-SSL-Proxyhttps://ssl-proxy.tld/domain.tld/nextcloud mit der IP-Adresse 10.0.0.1zugreifen möchten, können Sie die folgenden Parameter in der config/config.php
einstellen.
<?php CONFIG = array ( 'trusted_proxies' => ['10.0.0.1'], 'overwritehost' => 'ssl-proxy.tld', 'overwriteprotocol' => 'https', 'overwritewebroot' => '/domain.tld/nextcloud', 'overwritecondaddr' => '^10\.0\.0\.1$', 'overwrite.cli.url' => 'https://domain.tld/, );
- Hinweis
- Wenn Sie den SSL-Proxy während der Installation verwenden möchten, müssen Sie die
config/config.php
erstellen, andernfalls müssen Sie das bestehende$CONFIG-Array erweitern.