Nextcloud auf Apache hinter nginx Proxy Manager

Hallo,

ich habe Nextcloud hinter auf einem Apache2 laufen.
Dieser ist intern über die Adresse http://[IP]/nextcloud erreichbar.
Vor dem Apache2 habe ich ein nginx Proxy Manager laufen.
Die Subdomains werden von mir bei all-inkl.com gehostet und die IP wird über ddclient immer wieder aktualisiert.

Ich habe aber nun ein kleines Problem. Ich würde gerne über die Adresse “http://nextcloud.[Domain].de” die Instanz von Nextcloud aufrufen. Dies funktioniert auch wunderbar, aber es gibt da dieses eine kleine Problem. Wenn ich die Adresse aufrufe, wird immer das Subfolder mit angegeben, z.B. “http://nextcloud.[Domain].de/nextcloud”. Ich würde das aber gerne nur über die Subdomain aufrufen.
Folgende Einstellungen habe ich beim nginx Proxy Manager vorgenommen:


Ich habe es auch schon über einen neuen virtuellen Host im Apache versucht, aber das ging völlig in die Hose.

<VirtualHost *:80>
ServerName nextcloud.domain.de
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/nextcloud

    <Directory /var/www/html/nextcloud>
            Options -Indexes +FollowSymLinks +MultiViews
            AllowOverride All
            Require all granted
    </Directory>

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

    <IfModule mod_rewrite.c>
            RewriteEngine on
            RewriteRule ^\.well-known/carddav /nextcloud/remote.php/dav [R=301,L]
            RewriteRule ^\.well-known/caldav /nextcloud/remote.php/dav [R=301,L]
    </IfModule>

Vielleicht kann mir einer sagen, was ich falsch mache?

Danke im Voraus,
Robert

/* Edit: Ich weiß https wäre besser, aber aktuell würde ich erstmal das ganze per http zum laufen bringen um Fehler durch https zu vermeiden. Nach dem ich das ganze zum Laufen gebracht habe, kommt https dran.

Hallo @h725rk

Ich nutze den Nginx ProxyManager selber nicht, aber kannst du im zweiten Bild das Feld “Define location” nicht einfach leer lassen? Oder den Eintrag im Tab “Custom locations” ganz löschen bzw. dort erst gar nichts hinzufügen?

Wenn ich “Define location” einfach leer lasse, dann zeigt die Subdomain nicht mehr auf den internen Link http://interneIP/nextcloud und ich müsste die Seite immernoch mit dem Zusatz nextcloud aufrufen. in etwa so http://nextcloud.domain.de/nextcloud.

Wenn ich den Tab “Custom locations” komplett lösche, dann zeigt die Subdomain nur noch auf webserver auf port 80 und mehr nicht. Dafür habe ich schon einen andere Subdomain.

@h725rk was steht in deiner config.php? bezüglich overwrite.

Ich habe nur folgende Zeile mit Overwerite gefunden:

‘overwrite.cli.url’ => ‘http://raspberrypi/nextcloud’,

Sollte ich die auf die externe Subdomain ändern oder auf die interne Adresse?

probier mal die externe adresse.

das könnte das nächste problem (warnung) werden. diese rewrite rule musst du im nginx vornehmen. oder?

Hat leider nicht funktioniert.

Das andere Probleme mit rewrite ist das nächste Problem was ich lösen will :smiley:

Mal eine blöde Frage… Befindet sich das alles auf der gleichen Maschine? Nextcloud, die andere Website und der NGINX Proxy Manager?

Wenn die Antwort ja ist, würde ich dir empfehlen je einen VirtualHost für die Nextcloud und die andere Website zu erstellen und SSL direkt mit dem Apache zu machen. Einen Reverse Proxy brauchst du eigentlich nur, wenn du mehrere Dienste auf verschiedenen Maschinen bzw verschiedenen lokalen IP Adressen und/oder Ports am laufen hast. Btw: Apache kann auch Reverse Proxy.

Nein, der nginx läuft auf einem raspi und der apache auf einem anderen.
Ich habe auch schon überlegt, weitere virtuelle hosts anzulegen, aber ich wollte es dynamischer haben und nicht so statisch.

Ok. Aber auf dem mit dem Apache läuft die Nextcloud und noch weine weitere Website?

Aktuell nur nextcloud.
Werde das aber defintiv erweitern um WordPress und ein paar andere Dinge.

Ok. Aber dann macht es imho nicht viel Sinn, die Nextcloud in einem Subfolder der Hauptomain zu betreiben und das ganze dann mit einem Reverse Proxy, quasi wieder gerade biegen zu wollen :wink: …auch im Hinblick darauf, dass du noch weitere Dinge darauf betreiben willst.

Ich würde mit einer sauberen Config neu starten. So dass du deine Cloud erst einmal ohne Reverse Proxy via http://nextcloud.deinedomain.tld von überall her erreichst. Danach kannst du immer noch entscheiden, ob du SSL über einen vorgeschalteten Reverse Proxy machen willst, oder direkt auf dem Apache.

  1. Das Portforwarding auf denjenigen Raspi umbiegen, auf dem die Nextcloud läuft. Oder zumindest dafür sorgen, dass du ihn von intern über den Domainnamen “nextcloud.deinedomain.tld” erreichst.

  2. Alle VirtualHosts auflisten:

    ls /etc/apache2/sites-available

  3. alle in der Liste inkl. der default.conf deaktivieren:

    sudo a2dissite dateiname.conf

  4. eine neue config Datei anlegen für nextcloud:

    sudo nano /etc/apache2/sites-available/nextcloud.conf

    …und folgendes einfügen:

     <VirtualHost *:80>
       DocumentRoot /var/www/html/nextcloud/
       ServerName  nextcloud.deinedomain.tld
    
     <Directory /var/www/html/nextcloud/>
       Require all granted
       AllowOverride All
       Options FollowSymLinks MultiViews
    
     <IfModule mod_dav.c>
       Dav off
     </IfModule>
    
     </Directory>
     </VirtualHost>
    
  5. Datei Speichern und den Virtualhost aktivieren:

    sudo a2ensite nextcloud.conf

  6. Apache neu starten:

    sudo systemctl restart apache2

  7. Config php anpassen:

    'overwrite.cli.url' => 'http://nextcloud.deinedomain.tld',
    'htaccess.RewriteBase' => '/',

Danke erstmal.
Ich schaue mir das heute Abend nochmal in Ruhe an.

Dann komme ich wohl nicht um die virtual hosts drum herum.

Ich sage nicht, dass es nicht auch anders funktionieren kann. Aber es ist imho die sauberste und unter dem Strich auch die einfachste und übersichtlichste Lösung. Vorallem wenn du mehrere Sites auf dem gleichen Server hosten möchtest und diese jeweils über einen seperaten Domainnamen bzw eine separate Subdomain erreichbar sein sollen. (site1.deinedomain.tld, site2.deinedomain.tld usw…)

Hallo,

danke erstmal.
Ich habe jetzt komplett das Ganze umgedacht. Der Apache wird nun ohne ReverseProxy angesprochen und muss sagen, das Ganze macht es jetzt einfacher. LetsEncrypt machte ein paar Probleme, aber die sind auch nun behoben.
Den Reverse Proxy werde ich wohl erstmal nicht mehr verwenden. Vielen Dank für die Hilfe.

1 Like