Nextcloud/Reverse proxy

Aus Foxwiki

Nextcloud/Reverse proxy - Kurzbeschreibung

Beschreibung[Bearbeiten | Quelltext bearbeiten]

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[Bearbeiten | Quelltext bearbeiten]

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[Bearbeiten | Quelltext bearbeiten]

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[Bearbeiten | Quelltext bearbeiten]

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[Bearbeiten | Quelltext bearbeiten]

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[Bearbeiten | Quelltext bearbeiten]

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[Bearbeiten | Quelltext bearbeiten]

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[Bearbeiten | Quelltext bearbeiten]

acl url_discovery path /.well-known/caldav /.well-known/carddav
http-request redirect location /remote.php/dav/ code 301 if url_discovery

NGINX[Bearbeiten | Quelltext bearbeiten]

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[Bearbeiten | Quelltext bearbeiten]

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[Bearbeiten | Quelltext bearbeiten]

Mehrere Domains reverse SSLproxy[Bearbeiten | Quelltext bearbeiten]

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.


Anhang[Bearbeiten | Quelltext bearbeiten]

Siehe auch[Bearbeiten | Quelltext bearbeiten]

Links[Bearbeiten | Quelltext bearbeiten]

Weblinks[Bearbeiten | Quelltext bearbeiten]
  1. https://docs.nextcloud.com/server/29/admin_manual/configuration_server/reverse_proxy_configuration.html