Nextcloud/Reverse proxy: Unterschied zwischen den Versionen
K (Dirkwagner verschob die Seite Nextcloud/Configuration/Reverse proxy nach Nextcloud/Reverse proxy, ohne dabei eine Weiterleitung anzulegen) |
|||
(12 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
'''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. | 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 | == 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 <code>config/config.php</code> konfiguriert | 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 <code>config/config.php</code> konfiguriert | |||
Legen Sie den Parameter <code>trusted_proxies</code> als ein Array von fest: | Legen Sie den Parameter <code>trusted_proxies</code> als ein Array von fest: | ||
Zeile 19: | Zeile 16: | ||
* IPv6-Bereiche in CIDR-Notation | * 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. | 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. | 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 | == Ü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 <code>config/config.php</code> verwenden. | 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 <code>config/config.php</code> verwenden. | |||
* <code>overwritehost</code> legt den Hostnamen des Proxys fest. Sie können auch einen Port angeben. | * <code>overwritehost</code> legt den Hostnamen des Proxys fest. | ||
* <code>overwriteprotocol</code> legt das Protokoll des Proxys fest. Sie können zwischen den beiden Optionen '''http''' und '''https''' wählen. | * Sie können auch einen Port angeben. | ||
* <code>overwriteprotocol</code> legt das Protokoll des Proxys fest. | |||
* Sie können zwischen den beiden Optionen '''http''' und '''https''' wählen. | |||
* <code>overwritewebroot</code> setzt den absoluten Webpfad des Proxys auf den Nextcloud-Ordner. | * <code>overwritewebroot</code> setzt den absoluten Webpfad des Proxys auf den Nextcloud-Ordner. | ||
* <code>overwritecondaddr</code> ü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. | * <code>overwritecondaddr</code> überschreibt die Werte in Abhängigkeit von der Remote-Adresse. | ||
* <code>overwrite.cli.url</code> 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. | * 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. | |||
* <code>overwrite.cli.url</code> 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. | 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. | 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 | RewriteEngine On | ||
RewriteRule ^/\.well-known/carddav <nowiki>https://%{SERVER_NAME}/remote.php/dav/</nowiki> [R=301,L] | RewriteRule ^/\.well-known/carddav <nowiki>https://%{SERVER_NAME}/remote.php/dav/</nowiki> [R=301,L] | ||
RewriteRule ^/\.well-known/caldav <nowiki>https://%{SERVER_NAME}/remote.php/dav/</nowiki> [R=301,L] | RewriteRule ^/\.well-known/caldav <nowiki>https://%{SERVER_NAME}/remote.php/dav/</nowiki> [R=301,L] | ||
=== | === Traefik1 === | ||
Docker-Labels verwenden: | Docker-Labels verwenden: | ||
traefik.frontend.redirect.permanent: 'true' | traefik.frontend.redirect.permanent: 'true' | ||
Zeile 50: | Zeile 58: | ||
Verwendung von traefik.toml: | Verwendung von traefik.toml: | ||
[frontends.frontend1.redirect] | [frontends.frontend1.redirect] | ||
regex = "<nowiki>https://(.*)/.well-known/(?:card|cal)dav</nowiki>" | |||
replacement = "<nowiki>https://$1/remote.php/dav</nowiki> | |||
permanent = true | |||
Danke an @pauvos und @mrtumnus für die Traefik-Beispiele. | Danke an @pauvos und @mrtumnus für die Traefik-Beispiele. | ||
=== | === Traefik2 === | ||
Docker-Labels verwenden: | Docker-Labels verwenden: | ||
traefik.http.routers.nextcloud.middlewares: 'nextcloud_redirectregex' | traefik.http.routers.nextcloud.middlewares: 'nextcloud_redirectregex' | ||
Zeile 63: | Zeile 71: | ||
Verwendung einer TOML-Datei: | Verwendung einer TOML-Datei: | ||
[http.middlewares] | [http.middlewares] | ||
[http.middlewares.nextcloud-redirectregex.redirectRegex] | |||
permanent = true | |||
regex = "<nowiki>https://(.*)/.well-known/(?:card|cal)dav</nowiki>" | |||
replacement = "<nowiki>https://${1}/remote.php/dav</nowiki>" | |||
=== | === HAProxy === | ||
acl url_discovery path /.well-known/caldav /.well-known/carddav | acl url_discovery path /.well-known/caldav /.well-known/carddav | ||
http-request redirect location /remote.php/dav/ code 301 if url_discovery | http-request redirect location /remote.php/dav/ code 301 if url_discovery | ||
=== | === NGINX === | ||
location /.well-known/carddav { | location /.well-known/carddav { | ||
return 301scheme://$host/remote.php/dav; | |||
} | } | ||
location /.well-known/caldav { | location /.well-known/caldav { | ||
return 301scheme://$host/remote.php/dav; | |||
} | } | ||
oder | oder | ||
rewrite ^/\.well-known/carddav <nowiki>https://$server_name/remote.php/dav/</nowiki> redirect; | rewrite ^/\.well-known/carddav <nowiki>https://$server_name/remote.php/dav/</nowiki> redirect; | ||
rewrite ^/\.well-known/caldav <nowiki>https://$server_name/remote.php/dav/</nowiki> redirect; | rewrite ^/\.well-known/caldav <nowiki>https://$server_name/remote.php/dav/</nowiki> redirect; | ||
=== | === Caddy === | ||
subdomain.example.com { | 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 | === Mehrere Domains reverse SSLproxy === | ||
Wenn Sie auf Ihre Nextcloud-Installation '''<nowiki>http://domain.tld/nextcloud</nowiki>'''über einen Multiple-Domains-Reverse-SSL-Proxy'''<nowiki>https://ssl-proxy.tld/domain.tld/nextcloud</nowiki>''' mit der IP-Adresse '''10.0.0.1'''zugreifen möchten, können Sie die folgenden Parameter in der <code>config/config.php</code> einstellen. | Wenn Sie auf Ihre Nextcloud-Installation '''<nowiki>http://domain.tld/nextcloud</nowiki>'''über einen Multiple-Domains-Reverse-SSL-Proxy'''<nowiki>https://ssl-proxy.tld/domain.tld/nextcloud</nowiki>''' mit der IP-Adresse '''10.0.0.1'''zugreifen möchten, können Sie die folgenden Parameter in der <code>config/config.php</code> einstellen. | ||
<?php | <?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' => '<nowiki>https://domain.tld/</nowiki>, | |||
); | ); | ||
Wenn Sie den SSL-Proxy während der Installation verwenden möchten, müssen Sie die <code>config/config.php</code> erstellen, andernfalls müssen Sie das bestehende'''$CONFIG-Array''' erweitern. | ; Hinweis | ||
: Wenn Sie den SSL-Proxy während der Installation verwenden möchten, müssen Sie die <code>config/config.php</code> erstellen, andernfalls müssen Sie das bestehende'''$CONFIG-Array''' erweitern. | |||
<noinclude> | |||
== Anhang == | |||
=== Siehe auch === | |||
{{Special:PrefixIndex/{{BASEPAGENAME}}}} | |||
==== Links ==== | |||
===== Weblinks ===== | |||
# https://docs.nextcloud.com/server/29/admin_manual/configuration_server/reverse_proxy_configuration.html | |||
[[Kategorie:Nextcloud/Konfiguration]] | |||
</noinclude> |
Aktuelle Version vom 21. Juni 2024, 09:35 Uhr
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.