Nextcloud/Reverse proxy: Unterschied zwischen den Versionen

Aus Foxwiki
(Die Seite wurde neu angelegt: „* * Nextcloud-Konfiguration * Umgekehrter Proxy * Auf GitHub bearbeiten ---- = Umgekehrtproxy = 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 von vertrauenswürdigenproxies == Aus Sicherheitsgründen müssen Sie exp…“)
 
 
(13 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
*
'''Nextcloud/Reverse proxy''' - Kurzbeschreibung
* Nextcloud-Konfiguration
* Umgekehrter Proxy
* Auf GitHub bearbeiten


----
== Beschreibung ==
 
= Umgekehrtproxy =
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 von vertrauenswürdigenproxies ==
== 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 Sieparameters ==
== Ü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 ==
== 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 ===
=== 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]
Dank an @ffried für das Apache2-Beispiel.


=== Traefik1 ===
=== 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>"
regex = "<nowiki>https://(.*)/.well-known/(?:card|cal)dav</nowiki>"
  replacement = "<nowiki>https://$1/remote.php/dav</nowiki>
replacement = "<nowiki>https://$1/remote.php/dav</nowiki>
  permanent = true
permanent = true
Danke an @pauvos und @mrtumnus für die Traefik-Beispiele.
Danke an @pauvos und @mrtumnus für die Traefik-Beispiele.


=== Traefik2 ===
=== 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]
[http.middlewares.nextcloud-redirectregex.redirectRegex]
    permanent = true
permanent = true
    regex = "<nowiki>https://(.*)/.well-known/(?:card|cal)dav</nowiki>"
regex = "<nowiki>https://(.*)/.well-known/(?:card|cal)dav</nowiki>"
    replacement = "<nowiki>https://${1}/remote.php/dav</nowiki>"
replacement = "<nowiki>https://${1}/remote.php/dav</nowiki>"


=== HAProxy ===
=== 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 ===
=== NGINX ===
  location /.well-known/carddav {
  location /.well-known/carddav {
    return 301 $scheme://$host/remote.php/dav;
return 301scheme://$host/remote.php/dav;
  }
  }
   
   
  location /.well-known/caldav {
  location /.well-known/caldav {
    return 301 $scheme://$host/remote.php/dav;
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 ===
=== Caddy ===
  subdomain.example.com {
  subdomain.example.com {
    redir /.well-known/carddav /remote.php/dav/ 301
redir /.well-known/carddav /remote.php/dav/ 301
    redir /.well-known/caldav /remote.php/dav/ 301
redir /.well-known/caldav /remote.php/dav/ 301
   
   
    reverse_proxy {$NEXTCLOUD_HOST:localhost}
reverse_proxy {$NEXTCLOUD_HOST:localhost}
  }
  }


== Example ==
== Beispiel ==


=== Mehrere Domains reverse SSLproxy ===
=== 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 (
  CONFIG = array (
  'trusted_proxies'   => ['10.0.0.1'],
'trusted_proxies' => ['10.0.0.1'],
  'overwritehost'     => 'ssl-proxy.tld',
'overwritehost' => 'ssl-proxy.tld',
  'overwriteprotocol' => 'https',
'overwriteprotocol' => 'https',
  'overwritewebroot' => '/domain.tld/nextcloud',
'overwritewebroot' => '/domain.tld/nextcloud',
  'overwritecondaddr' => '^10\.0\.0\.1$',
'overwritecondaddr' => '^10\.0\.0\.1$',
  'overwrite.cli.url' => '<nowiki>https://domain.tld/</nowiki>,
'overwrite.cli.url' => '<nowiki>https://domain.tld/</nowiki>,
  );
  );
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.
; Hinweis
----© Copyright 2024 Nextcloud GmbH.
: 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.


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