Die richtige Konfiguration für Nextcloud hinter einem Apache Reversproxy zu finden, ha schon den einen oder anderen einige graue Haare beschert.
Aber mal vorweg, was für einen Grund gibt es, Nextcloud auf einem Webserver hinter einen Apache Server zu installieren.
Nun in meinem Fall ist es so, das mein NAS auf mit WIndows 10 läuft und Nextcloud Windows nicht unterstützt.
Daher musste eine Workaround her.
Der sieht so aus, das ich Ubunutu ( 18.04 LTS) in einer Hyper-V installiert habe.
Wie man das macht und wie man Apache und Nextcloud grundlegen installiert gehe ich jetzt nicht im Detail darauf ein.
Ich möchte nur meine Konfiguration teilen, damit andere evtl. nicht so lange danach suchen.
Hier ein Diagramm wie das Netzwerktechnisch aussehen könnte.
Zur Config.
In diesem Beispiel ist die Kommunikation zwischen dem Windows Apache und dem Linux Apache unverschlüsselt per HTTP.
Für den Internetzugrff ist es prinzipiell ausreichend, wenn der Apache am Windows Server HTTPS unterstützt.
Wer es ganz sicher machen möchte, muss am Linux Apache ebenfalls SSL aktivieren und ein Zertifikat einrichen.
1. Am (Windows) Apache Server 1 muss das Proxy Modul aktiv sein.
2. Man legt einen Apache Virtualhost für Port 80 und 443 an bzw. ändert diese wie folgt:
<VirtualHost *:80>
ServerName externaldomain.tomynextcloud.server<IfModule mod_headers.c>
Header always set Strict-Transport-Security „max-age=15552000; includeSubDomains“
</IfModule>
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]
ProxyPass / „http://IP_OF_MY_Linux_NEXTCLOUD_SERVER/“
ProxyPassReverse / „http://IP_OF_MY_Linux_NEXTCLOUD_SERVER/“Timeout 3600
</VirtualHost>
<VirtualHost *:443>
ServerName externaldomain.tomynextcloud.server
<IfModule mod_headers.c>
Header always set Strict-Transport-Security „max-age=15552000; includeSubDomains“
</IfModule>
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]
ProxyPass / „http://TARGET_IP_OF_MY_Linux_NEXTCLOUD_SERVER/“
ProxyPassReverse / „http://TARGET_IP_OF_MY_Linux_NEXTCLOUD_SERVER/“Timeout 3600
</VirtualHost>
In der Apache Config am Linux Server trägt man foldendes ein:
Timeout 3600
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride All
</Directory>
Der Timeout ist bei beiden wichtig.
Wenn man zum Beispiel größere Dateien hochlädt und der PHP Timeout größer ist, als der von Apache, bekommt mein eine Fehlermeldung, das Nextcloud, die Filechunks nicht zusammensetzen konnte.
PHP INI Einstellungen am Linux Server dazu wären zum Beispiel:
max_execution_time = 3600
max_input_time = 3600
memory_limit = 512M
upload_max_filesize = 500M
In der config.php von Nextcloud muss man folgenden eintragen:
‚trusted_domains‘ =>
array (
0 => ‚externaldomain.tomynextcloud.server‘,
1 => ‚lokaler_hostname_vom_linux_server‘,
2 => ‚IP_des_linux_server‘,
),‚overwrite.cli.url‘ => ‚http://externaldomain.tomynextcloud.server‘,
‚htaccess.RewriteBase‘ => ‚/‘,
‚overwritehost‘ => ‚externaldomain.tomynextcloud.server,
‚overwriteprotocol‘ => ‚https‘,
‚trusted_proxies‘ => ‚IP_DES_PROXY_SERVERS‘,
Mit ‚overwriteprotocol‘ => ‚https‘, zwingt man Nextcloud dazu von HTTP auf HTTPS umzuspringen.
Wenn man das nicht möchte, kann man es rausnehmen.
‚htaccess.RewriteBase‘ => ‚/‘, muss evtl. angepasst werden, wenn Nextcloud in einem Unterordner installiert wurde.
Folgendes müsst ihr natürlich an Eure Umgebung anpassen:
externaldomain.tomynextcloud.server = Domäne über die der Webserver aus dem Internet erreichbar ist.
TARGET_IP_OF_MY_Linux_NEXTCLOUD_SERVER = IP des Linux Servers wo Nextcloud gehostet wird
lokaler_hostname_vom_linux_server = Der Hostname des Linux Servers wo Nextcloud gehostet wird
IP_DES_PROXY_SERVERS = Die IP-Adresse des Apache Proxyserver auf dem Windows Server
Bei Fragen könnt Ihr diese über die Kommentare stellen.
Viel Spaß beim „basteln“.