NC und NGINXProxyManager: Fehlermeldung HTTP-Header

Problemstellung:

Sehr geehrte Forengemeinde. Ich suche Hilfe beim Beheben eines Nextcloud-Fehlers. Ich erhalte unter Sicherheits- Einrichtungswarnungen die Meldung:

HTTP-Header Einige Header sind in deiner Instanz nicht richtig eingestellt - Der `Strict-Transport-Security`-HTTP-Header ist nicht gesetzt (er sollte mindestens `15552000` Sekunden betragen). FĂŒr erhöhte Sicherheit wird empfohlen, HSTS zu aktivieren.

Mein bisheriger Versuch der Problemlösung:

Ich habe im Nginx Proxy Manager unter Proxy Host den Eintrag fĂŒr Nexcloud ausgewĂ€hlt und editiert. Dort habe ich unter der Custom Nginx Configuration den Eintrag

add_header Strict-Transport-Security “max-age=15552000; includeSubDomains; preload” always;

HinzugefĂŒgt. Leider blieb die Fehlermeldung erhalten.

Beim Googeln habe ich gelesen, dass unter SSL noch der Eintrag „Force SSL“ eingetragen werden muss. ZusĂ€tzlich habe ich die Nextcloud config.php mit den Eintrag

‘trusted_proxies’ =>
array (
0 => ‘172.18.0.0/16’,
),

Erweitert. 172.18.0.0 ist mein Docker Netzwerk.

Leider funktioniert danach Nextcloud nicht mehr. Ich erhalte im Browser die Fehlermeldung:
Fehler: Umleitungsfehler
Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann.
Dieses Problem kann manchmal auftreten, wenn Cookies deaktiviert oder abgelehnt werden.

Deaktiviere ich „Force SSL“ im Nginx Proxy Manager, dann kann ich wieder auf Nextcloud zugreifen.

Leider erhalte ich in Nexcloud keinen Eintrag in der Protokoll-Anzeige.

Was mache ich falsch?

Infos zu meinem System:

Ich hoste Nextcloud selber. HierfĂŒr habe ich zu Hause hinter einer Fritzbox 7690 einen MiniServer (AMD Ryzen 5 5500U, 32GB Ram, 2TB SSD) auf dem Proxmox (Version 9) installiert ist. Auf dem Proxmox Server ist ein LXC Container mit Debian 12 und Docker installiert. Nextcloud lĂ€uft als Docker Container (linuxserver/nextcloud:latest). FĂŒr Nexcloud betreibe ich in Docker collabora als eigenstĂ€ndigen Container (collabora/code:latest). Ebenso imaginary als eigenen Docker Container (nextcloud/aio-imaginary:latest). MariaDB ist mein Datenbanksystem fĂŒr Nextcloud welches unter Proxmox als eigenstĂ€ndiger LXC-Container (Debian 12) lĂ€uft.
Die Verbindung nach außen ermöglicht mir der NGINX Proxy Manager welcher ebenso als Docker-Container betrieben wird.
Alle Dockersysteme werden per watchtower auf AktualitĂ€t geprĂŒft und im Bedarfsfall aktualisiert.

Alle Systeme werden mindestens einmal pro Woche auf AktualitĂ€t geprĂŒft und im Bedarfsfall aktualisiert.

Meine DNS-DomĂ€ne betreibe ich ĂŒber Cloudflare bei der Nextcloud in einer eigene SubdomĂ€ne betrieben wird (nextcloud.meinedomaeine.de).

Nextcloud Version: 32.03
MariaDB Version: 12.1.2
NginxProxyManager:2.13.5

Hallo zusammen,

hat keiner eine Idee? Ich wĂŒrde mich sehr ĂŒber Hinsweise freunen um der Lösung nĂ€her zu kommen.

Herzliche GrĂŒĂŸe

Jan

@JanNi

das sieht irgendwie komisch aus → warum eine address range? hier wird eine ip-adresse deines reverse proxies erwartet. denke bitte auch dran, das darf nicht die docker network ip sein, sondern die host ip adresse.

Setting trusted proxies

Adding trusted proxies manually in config.php:

edit config.php and add/edit section

  'trusted_proxies' => 
  array (
    0 => 'your.reverse.proxy.ip',
    1 => 'your.other.proxy.ip',
   ),

or issue occ command on host (iterating values 0, 1, 2
):

reverse proxy documentation

und schau dass der NPM korrekt eingestellt ist:

Hallo scubamuc,

danke fĂŒr deine Hilfe. Das mit der IP Range des Docker-Netzwerkes habe ich aus irgendeiner Doku ĂŒbernommen.

Ich habe keine seperate externe IP-Adresse fĂŒr den Docker-Container fĂŒr den Reverse-Proxy. Im Docker Netzwerk hat dieser die IP-Adresse 172.17.0.7. Von außen ist er ĂŒber die IP-Adresse des Docker-Servers 192.168.2.204 ĂŒber Port 80 und 443 zu erreichten. Den Port 443 habe ich dann in der FritzBox freigegeben.

Die Einstellungen in NGINX unter SSL wie du Sie geschickt hast kann ich derzeit nut zum teil machen.

HTTP/2 Support funktioniert.
Sobald ich aber Force SSL einschalte bekomme ich beim aufrufen von Nexcloud die Fehlermeldung “Fehler: Umleitungsfehler. Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann.”

Ich habe nun folgende Änderung in der config.php vorgenommen:

Vorher:

‘trusted_proxies’ =>
array (
0 => ‘172.18.0.0/16’,
),

nach der Änderung:

‘trusted_proxies’ =>
array (
0 => ‘172.18.0.7’,
1 => ‘192.168.2.204’,
),

Danach habe ich Nexcloud neu gesartet und im NGINX Proxy Manger “Force SSL” eingeschaltet.
Leider kam danach wieder der Umleitungsfehler.

Schalte ich “Force SSL” aus, kann ich wieder auf Nextcloud zugreifen.

Hast du vielleicht noch eine Idee? Oder habe ich etwas falsch gemacht? Sorry wenn meine Fragen etwas unprofessionell sind. Das sind meine ersten Gehversuche mit Docker und einem Reverse Proxy.

weshalb sind da zwei trusted proxies drinnen? wie viele hast du denn?

Nur den einen. Die 192.168.2.204 ist die externe IP-Adresse der VM und die 172.18.0.7 ist die IP-Adresse des NGINX Proxy Servers.

du hast einen reverse proxy, der lÀuft auf einem host und meldet sich auf port 80 und 443. dieser reverse proxy ist dein single point of entry zu deinen services. diese eine ip-adresse sollte in der Fritzbox freigegeben sein und genau diese eine ip-addresse sollte in deinen trusted proxies aufgelistet sein!

Vielen Dank fĂŒr deine MĂŒhe. Ich habe das abgeĂ€ndert. Nun wird ausschließlich die 192.168.2.204 in der config.php unter trusted_proxies aufgelistet.

Der Zugriff auf Nextcloud funktioniert. Allerdings bekomme ich wieder den Umleitungsfehler wenn ich Force SSL im Reverse Proxy aktiviere.

kannst du mal deine config.php posten
 achte darauf, dass du keine passwörter postest.

Gerne

> <?php
> $CONFIG = array (
>   'datadirectory' => '/data',
>   'instanceid' => 'ocd9h3vpc494',
>   'passwordsalt' => 'XXXX',
>   'secret' => 'XXXX',
>   'trusted_domains' => 
>   array (
>     0 => 'nextcloud.XXXX.uk',
>     1 => 'docker-proxmox',
>     2 => 'docker-proxmox.fritz.box',
>     3 => '192.168.2.204',
>   ),
>   'dbtype' => 'mysql',
>   'version' => '32.0.3.2',
>   'overwrite.cli.url' => 'https://nextcloud.XXXX.uk',
>   'overwriteprotocol' => 'https',
>   'trusted_proxies' => 
>   array (
>     0 => '192.168.2.204',
>   ),
>   'dbname' => 'nextcloud',
>   'dbhost' => 'mariadb:3306',
>   'dbport' => '',
>   'dbtableprefix' => 'oc\_',
>   'mysql.utf8mb4' => true,
>   'dbuser' => 'nextclouduser',
>   'dbpassword' => 'XXXX',
>   'installed' => true,
>   'default_phone_region' => 'DE',
>   'default_language' => 'de',
>   'defaultapp' => 'dashboard,files',
>   'enable_previews' => true,
>   'preview_max_x' => 4096,
>   'preview_max_y' => 4096,
>   'preview_max_filesize_image' => 50,
>   'preview_max_memory' => 256,
>   'enabledPreviewProviders' => 
>   array (
>     0 => 'OC\\\\Preview\\\\PNG',
>     1 => 'OC\\\\Preview\\\\JPEG',
>     2 => 'OC\\\\Preview\\\\jpg',
>     3 => 'OC\\\\Preview\\\\JPG',
>     4 => 'OC\\\\Preview\\\\GIF',
>     5 => 'OC\\\\Preview\\\\HEIC',
>     6 => 'OC\\\\Preview\\\\BMP',
>     7 => 'OC\\\\Preview\\\\XBitmap',
>     8 => 'OC\\\\Preview\\\\MP3',
>     9 => 'OC\\\\Preview\\\\TXT',
>     10 => 'OC\\\\Preview\\\\MarkDown',
>     11 => 'OC\\\\Preview\\\\OpenDocument',
>     12 => 'OC\\\\Preview\\\\Krita',
>     13 => 'OC\\\\Preview\\\\Movie',
>     14 => 'OC\\\\Preview\\\\MKV',
>     15 => 'OC\\\\Preview\\\\MP4',
>     16 => 'OC\\\\Preview\\\\AVI',
>     17 => 'OC\\\\Preview\\\\PDF',
>     18 => 'OC\\\\Preview\\\\Imaginary',
>     19 => 'OC\\\\Preview\\\\Image',
>   ),
>   'preview_imaginary_url' => 'http://docker-proxmox.fritz.box:9191',
>   'updater.release.channel' => 'stable',
>   'mail_from_address' => 'nextcloud',
>   'mail_smtpmode' => 'smtp',
>   'mail_sendmailmode' => 'smtp',
>   'mail_domain' => 'XXXX.net',
>   'mail_smtphost' => 'server43.webgo24.de',
>   'mail_smtpport' => '587',
>   'mail_smtpauth' => 1,
>   'mail_smtpname' => 'XXXX',
>   'mail_smtppassword' => 'XXXX',
>   'maintenance' => false,
>   'maintenance_window_start' => 0,
>   'app_install_overwrite' => 
>   array (
>     0 => 'news',
>     1 => 'maps',
>     2 => 'bookmarks_fulltextsearch',
>     3 => 'wopi',
>     4 => 'backup',
>     5 => 'keeweb',
>     6 => 'memories',
>     7 => 'bookmarks',
>     8 => 'deck',
>     9 => 'fulltextsearch',
>     10 => 'fulltextsearch_elasticsearch',
>     11 => 'libresign',
>     12 => 'twofactor_admin',
>   ),
>   'memcache.local' => '\\\\OC\\\\Memcache\\\\APCu',
>   'filelocking.enabled' => true,
>   'memcache.locking' => '\\\\OC\\\\Memcache\\\\APCu',
>   'upgrade.disable-web' => true,
>   'loglevel' => 3,
>   'memories.exiftool' => '/config/www/nextcloud/apps/memories/bin-ext/exiftool-amd64-musl',
>   'memories.vod.path' => '/config/www/nextcloud/apps/memories/bin-ext/go-vod-amd64',
>   'memories.vod.ffmpeg' => '/usr/bin/ffmpeg',
>   'memories.vod.ffprobe' => '/usr/bin/ffprobe',
>   'memories.index.path.blacklist' => '\\\\/@(Recently-Snapshot|Recycle)\\\\/',
>   'memories.db.triggers.fcu' => true,
>   'memories.gis_type' => 1,
> );

Das kann keiner lesen.

Moment

Sorry ich kann keine txt-Datei hochladen. Kannst du das so lesen?

weshalb ist der reverse proxy in deinen trusted domains? eine IP-Adresse ist keine URL und dĂŒrfte da nicht drinnen sein. vermutlich ist auch docker-proxmox nicht notwendig weil das die eigene host adresse ist
 aber in diesem fall auch keine FQDN, mit dem eintrag 'docker-proxmox.fritz.box', verweist du ebenfalls auf den lokalen DNS der FritzBox
 ist also auch fehl am platz.

wenn du “SSL” möchtest, dann wird SSL nur von einem “public DNS” aus erreichbar sein. da du keinen DNS lokal betreibst, darf keine lokale referenz dort enthalten sein.

siehe bitte

Ah. OK. Danke fĂŒr die ErklĂ€rung. Ich lese mich einmal in die Themen ein. Allerdings erst morgen. Muss jetzt GlĂŒhwein trinken gehen. :slight_smile:
Ich schreibe dann in das Forum was ich gemacht habe.
Ich bin dir sehr dankbar fĂŒr deine Hilfe. Es ist nicht so ganz einfach wenn Wissen fehlt.

Herzliche GrĂŒĂŸe

Jan

Hallo,
ich habe die beiden Artikel gelesen und meine config.php soweit abgeÀndert dass nur noch der öffentliche DNS-Name in trusted_domains aufgelistet wird.

vorher:

  'trusted_domains' => 
  array (
    0 => 'nextcloud.XXXX.uk',
    1 => 'docker-proxmox',
    2 => 'docker-proxmox.fritz.box',
    3 => '192.168.2.204',
  ),

nachher:

>   'trusted_domains' => 
>   array (
>     0 => 'nextcloud.XXXX.uk',
>   ),

Das klingt fĂŒr mich nachvollziebar, dass die Namensauflösung bei SSL nur von einem public DNS aufgelöst werden muss.
Den Zugriff auf Nextcloud habe ich weiterhin nach dieser Änderung.
Leider bekomme ich wieder den Umleitungsfehler wenn ich im reverse Proxy unter ssl “force ssl” aktiviere.
Was zum Teufel mache ich falsch? Ich finde nichts in den Logfiles von Nexcloud.

Das mit den trusted_proxy ist schonmal sehr gut. Du könntest noch deine lokale IP belassen, damit du intern, sprich ohne Internet, darauf zugreifen kannst. Ist aber nur ein kann kein muss.

Ist denn dein Apache richtig konfiguriert? Sprich leitet auf deinem LXC der Apache alle Daten auf SSL weiter?

Also ist in der sites-enabled Conf-Datei deines Webservers SSL aktiv? Falls nicht, dann wird das natĂŒrlich nichts. Da kannst du noch so sehr auf Port 443 pochen, wenn Nextcloud das nicht weiß und kennt wird es jegliche Verbindung unterbinden.

Hallo Thomas,
danke fĂŒr deine RĂŒckmeldung und den Hinweis mit “sites-enabled”.
Ich habe mir das Docker Image “linuxserver/nextcloud:latest” nun mehr im Detail angesehen.
Der dort verwendete Webserver ist ein NGINX.
Ich habe die Verzeichnisse “/data” und “/config” auf den Docker-Server verbunden.
Unter dem “/data” Verzeichnis finde ich die typischen Userverzeichnisse der Netxcloud User.
In dem “/config” Verzeichnis gibt es folgende Verzeichnisse und eine Datei:

“/keys” = das sind zwei SSL-SchlĂŒssel “cert.crt” und “cert.key”

“/php” = beinhaltet die Dateien “php-local.ini” und “www2.conf”. Beide Dateien sind bis auf Komentare leer.

“www” = Ist das typische Nexcloud Web Verzeichnis. Darunter gibt es das “/nextcloud”-Verzeichnis. Darunter befindet sich nur allerdings nur eine unkonfigurierte “index.html”-Datei und ein “/nextcloud”-Verzeichnis. In diesem Verzeichnis gibt es wieder drei Verzeichnisse “/themes”, “/apps” und “/config”. Das sind drei Verzeichnisse die von Nextcloud kommen. In dem “/config”-Verzeichnis befindet sich unter anderem die “config.php”-Datei von Nextcloud.

In dem “nginx” Verzeichnis befinden die Dateien “dhparams.pem, ssl.conf, nginx.conf, resolver.conf, worker_processes.conf” und das Verzeichnis “/site-confs” mit der Datei “default.conf”.

Das Verzeichnis “/log” beinhaltet zwei Unterordner mit den Namen “/nginx” und “/php”. Ebenso ist die Datei “logrotate.status” In den Unterverzeichnissen sind die Logfiles von dem Webserver und PHP abgelegt.

Dann gibt es auf root Ebene noch eine “core” Datei welche 221MB groß ist und mir der Zweck unbekannt ist.

Wo kann ich prĂŒfen ob die SSL-Einstellungen richtig gesetzt sind? Ein “/sites-enabled” Verzeichnis habe ich nicht gefunden.

Sorry wenn die Frage etwas unprofessionell ist. Ich bin wie gesagt kein Profi.

Vielen Dank

Gruß
Jan

Sorry, erstmal nur eine schnelle Antwort.

Ich habe ĂŒbersehen, dass du das ganze als Docker laufen lĂ€sst. Das geht natĂŒrlich anders. Ich dachte du hast es als Web Version installiert. Somit ist das fĂŒr dich erstmal irrelevant.

Aber damit ich es richtig verstehe
hast du Nextcloud AIO installiert oder einfach Nextcloud als Docker Image?

Meine Empfehlung wĂ€re Nextcloud AIO zu nutzen. Zum einen ist die Installation um einiges einfacher, da alles vorkonfiguriert ist und zum anderen sind zusĂ€tzliche Funktionen meist schon integriert. Außerdem gibt es bei der Verbindung zur eigenen URL und zum Reverse Proxy erheblich einfacher.

Hallo Thomas,
ja, ich habe Nextcloud als Docker Image installiert.

Die Idee Nextcloud AIO hatte ich auch schon. Ich glaube das werde ich als nÀchstes mal ausprobieren.

Wie ist deine Empfehlung? Soll ich Nextcloud AIO als Docker-Container oder als eigenen Proxmox LXC Container installieren?

Schöne Weihnachten.

Gruß

Jan

@JanNi möchte mich nicht einmischen, aber es gibt viele möglichkeiten. wer die wahl hat, hat die qual. hier mal ein wenig lesestoff:

SCUBA’s Nextcloud snap server
Nextcloud snap wiki

→ auch eine möglichkeit, vor allem wenn du LXC verwenden möchtest. nach den KISS prinzip, (Keep It Sweet Simple)