Probleme mit HTTPS und Umleitungen bei lokaler Nextcloud-Installation (Nginx + Docker + Apache)

Beschreibung des Problems

Ich betreibe eine lokale Nextcloud-Instanz, bei der ein Problem mit der Anzeige und den Umleitungen auftritt. Beim Zugriff auf die Nextcloud-Seite werden hĂ€ufig Fehler wie “Die Netzwerkverbindung wurde unterbrochen” oder “Zu viele Umleitungen” angezeigt. Teilweise bleibt die Seite bei einem braunen Hintergrund stehen, und in der Browserkonsole tauchen Fehler wie “Failed to load resource” und “ReferenceError: Can’t find variable” auf.

Zudem gibt es Probleme mit der HTTPS-Umleitung. Sobald overwriteprotocol in der config.php auf https gesetzt wird, treten Umleitungsfehler auf. Ohne diese Einstellung funktioniert die Verbindung ĂŒber HTTP. Die Domain meineDomain.myfritz.net wird automatisch auf HTTPS umgeleitet, jedoch erscheint nur ein einfarbiger Hintergrund mit dem NC-Logo, ohne dass das Anmeldefenster oder weitere Inhalte geladen werden. Über HTTP kann ich mich immerhin ĂŒber die lokale IP-Adresse oder die öffentliche IP mit zugehörigem Port anmelden.

Die Domain meineDomain.myfritz.net ist erreichbar, und die SSL-Zertifikate wurden korrekt eingerichtet und ĂŒberprĂŒft (mit Certbot). Trotzdem tritt das Problem weiterhin auf.

Ich habe bereits die Konfigurationen von Nginx (als Reverse Proxy) und Apache (innerhalb von Docker Desktop) ĂŒberprĂŒft und mehrfach angepasst. Leider konnte ich den Fehler bislang nicht beheben.

Da ich absoluter AnfĂ€nger auf diesem Gebiet bin, hoffe ich, dass die bereitgestellten Informationen vollstĂ€ndig sind. Falls weitere Details benötigt werden, stelle ich diese gerne zur VerfĂŒgung.


Systemkonfiguration

Hardware

  • GerĂ€t: Mac Mini (2018)
  • Prozessor: Intel Core i5-8500B
  • RAM: 16 GB

Software

  • Betriebssystem: macOS 15.2
  • Docker Desktop: Version (aktuellste)
  • Nextcloud Version: Latest (Stand Dezember 2024)
  • PHP Version: 8.2.x
  • Datenbank: SQLite
  • Webserver: Apache innerhalb von Docker
  • Reverse Proxy: Nginx auf dem Host-System

Netzwerk

  • Internes LAN: 192.168.178.75:7777
  • FritzBox Domain: meineDomain.myfritz.net (Port 80/443 wird auf den Mac Mini weitergeleitet)

Fehlermeldungen im Detail

  1. Browser (Safari/Chrome):
  • “Die Netzwerkverbindung wurde unterbrochen”
  • “Zu viele Umleitungen”
  • Einfarbige Seite mit NC-Logo, ohne weitere Inhalte.
  1. Browser-Konsole:
  • “Failed to load resource: Die Netzwerkverbindung wurde unterbrochen”
  • “ReferenceError: Can’t find variable: OC”
  • “ReferenceError: Can’t find variable: OCA”
  1. curl:
  • Beim Zugriff ĂŒber HTTPS zeigt curl korrekte Umleitungen und Zertifikate, aber die Seite lĂ€dt nicht vollstĂ€ndig.
  1. Logfiles:
  • Nginx: Keine auffĂ€lligen Fehler, Umleitungen scheinen korrekt zu sein.
  • Apache: Zeigt gelegentlich 401 Unauthorized, ansonsten keine kritischen Hinweise.

Schritte zur Fehlerbehebung bisher

  1. SSL-Zertifikate ĂŒberprĂŒft und erneuert:
  • Zertifikate mit Certbot erstellt und geprĂŒft.
  1. Nginx- und Apache-Konfiguration angepasst:
  • Mehrfach ĂŒberarbeitet, um HTTPS-Umleitungen und Reverse-Proxy korrekt einzurichten.
  1. Browser-Cache geleert und Cookies gelöscht.
  2. Docker-Container neu gestartet und ĂŒberprĂŒft:
  • Alle relevanten Dienste laufen korrekt.
  1. Verbindungen mit curl und openssl getestet:
  • SSL-Verbindungen scheinen korrekt zu funktionieren.

Fragen

  1. Was könnte die Ursache fĂŒr die fehlerhafte Anzeige der Nextcloud-Seite sein? welche ja nur ĂŒber meineDomain.myfritz.net auftritt
  2. Gibt es bekannte Probleme oder besondere Anforderungen bei der Verwendung von overwriteprotocol in der config.php?
  3. Welche weiteren Debugging-Schritte könnte ich unternehmen, um die Ursache fĂŒr die fehlerhaften Umleitungen und Anzeigen zu finden?
  4. Ist die Kombination von Nginx (als Reverse Proxy) und Apache (innerhalb von Docker) korrekt, oder gibt es alternative KonfigurationsvorschlÀge?

Vielen Dank im Voraus fĂŒr die Hilfe!

Anhang:

Config.php

<?php
$CONFIG = array (
  'htaccess.RewriteBase' => '/',
  'memcache.local' => '\\OC\\Memcache\\APCu',
  'apps_paths' =>
  array (
    0 =>
    array (
      'path' => '/var/www/html/apps',
      'url' => '/apps',
      'writable' => false,
    ),
    1 =>
    array (
      'path' => '/var/www/html/custom_apps',
      'url' => '/custom_apps',
      'writable' => true,
    ),
  ),
  'upgrade.disable-web' => true,
  'instanceid' => 'ocwvrlcwihbx',
  'passwordsalt' => 'yxyxyxyxyxyxyxyxyx',
  'secret' => 'yxyxyxyxyxyxyxyxyxyxyxyxyxyx',
  'trusted_domains' =>
  array (
    0 => 'localhost:7777',
    1 => '192.168.178.75',
    2 => '192.168.178.74',
    3 => 'meineDomain.myfritz.net',
    4 => 'PuplicIP' , 
  ),
  'trusted_proxies' =>
    array (
      0 => '127.0.0.1',
      1 => '::1',
      2 => '172.17.0.1',
    ),

  'datadirectory' => '/var/www/html/data',
  'dbtype' => 'sqlite3',
  'version' => '30.0.3.2',
  'overwrite.cli.url' => 'https://meineDomain.myfritz.net',
  'overwriteprotocol' => 'https',
  'installed' => true,
  'maintenance_window_start' => '02:00',
  'maintenance' => false,
);

000-default.conf (Apache im Docker)

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ServerName meineDomain.myfritz.net
           <Directory /var/www/html/>
               AllowOverride All
           </Directory>
        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

nginx.conf

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    # HTTP auf HTTPS Weiterleitung
    server {
        listen 80;
        server_name meineDomain.myfritz.net;

        return 301 https://$host$request_uri;
    }

    # HTTPS Server
    server {
        listen 443 ssl;
        http2 on;

        server_name meineDomain.myfritz.net;

        ssl_certificate /etc/letsencrypt/live/meineDomain.net-0001/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/meineDomain.myfritz.net-0001/privkey.pem;

        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers HIGH:!aNULL:!MD5;

        location / {
            proxy_pass http://localhost:7777;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Frame-Options SAMEORIGIN;
            proxy_set_header X-Content-Type-Options nosniff;
            proxy_set_header Referrer-Policy no-referrer;
            proxy_set_header X-Forwarded-Host $host;
            

            client_body_timeout 3600;
            send_timeout 3600;
            proxy_read_timeout 3600;
            proxy_connect_timeout 3600;

            add_header Cache-Control "no-store, no-cache, must-revalidate" always;
            add_header Pragma "no-cache" always;
            add_header Expires 0;
            
        }

        # Fehlerseiten
        error_page 403 /custom_403.html;
        error_page 404 /custom_404.html;

        location = /custom_403.html {
            root /var/www/html;
        }

        location = /custom_404.html {
            root /var/www/html;
        }
    }
}

Fehlermeldungen Nextcloud/settings/admin/overview

 Unsicherer Zugriff auf die Website ĂŒber HTTP. Es wird dringend empfohlen, Ihren Server so einzurichten, dass HTTPS erforderlich ist. Ohne HTTPS funktionieren einige wichtige Webfunktionen wie "Kopieren in die Zwischenablage" oder "Service Worker" nicht! Weitere Informationen finden Sie in der Dokumentation ↗.

 Die Konfiguration des Reverse-Proxy-Headers ist falsch oder Sie greifen ĂŒber einen vertrauenswĂŒrdigen Proxy auf Nextcloud zu. Andernfalls stellt dies ein Sicherheitsproblem dar und kann es einem Angreifer ermöglichen, seine IP-Adresse so zu fĂ€lschen, dass sie fĂŒr Nextcloud sichtbar ist. Weitere Informationen finden Sie in der Dokumentation ↗.

 Einige Header sind in Ihrer 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. Weitere Informationen finden Sie in der Dokumentation ↗.

auf den ersten Blick fehler die Einstellung overwritehost. bitte lese folgende 101 Artikel durch, das sollte die meisten Fragen und Probleme lösen:

Weiter wĂŒrde ich empfehlen statt der myfritz Domain eine eigene Domain zu konfigurieren und dann einen “DNS alias” (CNAME) auf die myfritz Adresse setzen. Technisch ist beides gleich gut aber fĂŒr Menschen ist cloud.mydomain.tld einfacher


schaue dir diese fertigen Docker Vorlagen an
 hier funktioniert sehr viel bereits richtig