Wie konfiguriert man OpenLiteSpeed für das Reverse Proxy in Nextcloud, das sich im internen Netzwerk befindet?
Erstaunlich, aber die Suche auf Habr mit dem Begriff OpenLiteSpeed ergibt nichts! Ich eile, diese Ungerechtigkeit zu beheben, denn LSWS ist ein wertvoller Webserver. Ich liebe ihn für seine Geschwindigkeit und das moderne Web-Admin-Interface:

Obwohl OpenLiteSpeed am bekanntesten als „Beschleuniger“ für WordPress ist, werde ich in diesem Artikel eine ziemlich spezifische Anwendung vorstellen. Nämlich das Reverse Proxy von Anfragen. Sie werden sagen, dass man dafür gewohnt ist, nginx zu verwenden? Das würde ich akzeptieren. Aber wir sind so sehr mit LSWS zufrieden!
Proxying ist in Ordnung, aber wohin? Zu einem nicht minder großartigen Dienst – Nextcloud. Wir nutzen Nextcloud, um private „Clouds für den Dateiaustausch“ zu erstellen. Für jeden Kunden stellen wir eine eigene VM mit Nextcloud zur Verfügung und wollen diese nicht „nach außen“ hin exponieren. Stattdessen leiten wir Anfragen über einen gemeinsamen Reverse Proxy weiter. Diese Lösung ermöglicht:
1) den Server, auf dem die Kundendaten gespeichert sind, aus dem Internet zu entfernen und
2) IP-Adressen zu sparen.
Das Schema sieht folgendermaßen aus:

Es ist klar, dass das Schema vereinfacht ist, da die Organisation der Infrastruktur von Webdiensten nicht Thema dieses Artikels ist.
In diesem Artikel werde ich die Installation und die grundlegende Konfiguration von Nextcloud weglassen, zumal es auf Habr hierzu bereits Materialien gibt. Aber ich werde auf jeden Fall die Einstellungen zeigen, ohne die Nextcloud hinter einem Proxy nicht funktionieren wird.
Gegeben:
Nextcloud ist auf Host 1 installiert und für den Betrieb über http (ohne SSL) konfiguriert, hat nur ein lokales Netzwerkinterface und die „graue“ IP-Adresse 172.16.22.110.
Lass uns OpenLiteSpeed auf Host 2 konfigurieren. Dieser hat zwei Schnittstellen, eine externe (die ins Internet schaut) und eine interne mit der IP-Adresse im Netzwerk 172.16.22.0/24
Die IP-Adresse der externen Schnittstelle von Host 2 hat den DNS-Namen cloud.connect.link
Die Aufgabe ist:
Von außen über den Link ‘‘ (SSL) zu Nextcloud im internen Netzwerk zu gelangen.
- Wir installieren OpenLiteSpeed auf Ubuntu 18.04.2.
Fügen wir das Repository hinzu:
wget -O — |sudo bash
sudo apt-get update
installieren, starten:
sudo apt-get install openlitespeed
sudo /usr/local/lsws/bin/lswsctrl start
- Lass uns die Firewall minimal konfigurieren.
sudo ufw allow ssh
sudo ufw default allow outgoing
sudo ufw default deny incoming
sudo ufw allow http
sudo ufw allow https
sudo ufw allow from deinem Verwaltungs-Host to any port 7080
sudo ufw enable - Konfigurieren wir OpenLiteSpeed als Reverse Proxy.
Erstellen wir Verzeichnisse für den virtuellen Host.cd /usr/local/lsws/
sudo mkdir cloud.connect.link
cd cloud.connect.link/
sudo mkdir {conf,html,logs}
sudo chown lsadm:lsadm ./conf/
Wir konfigurieren den virtuellen Host über die Weboberfläche von LSWS.
Management-URL öffnen
Standardbenutzername/Passwort: admin/123456

Fügen Sie den virtuellen Host hinzu (Virtual Hosts > Hinzufügen).
Beim Hinzufügen erscheint eine Fehlernachricht über die fehlende Konfigurationsdatei. Das ist normal, es kann behoben werden, indem Sie auf Click to create klicken.

Im Tab Allgemein geben wir die Document Root an (auch wenn wir sie nicht benötigen, ohne sie funktioniert die Konfiguration nicht). Der Domainname wird von dem Virtual Host Name übernommen, den wir mit dem Namen unserer Domain benannt haben.

Jetzt ist es an der Zeit, daran zu erinnern, dass wir nicht nur einen Webserver haben, sondern einen Reverse-Proxy. Die folgenden Einstellungen zeigen LSWS, was und wohin zu proxen ist. In den Einstellungen des virtuellen Hosts öffnen wir den Tab Externe App und fügen eine neue Anwendung vom Typ Webserver hinzu:

Geben Sie einen Namen und eine Adresse an. Der Name kann beliebig sein, aber Sie sollten ihn sich merken, er wird in den nächsten Schritten nützlich sein. Die Adresse ist die, unter der Nextcloud im internen Netzwerk zu finden ist:

In denselben Einstellungen des virtuellen Hosts öffnen wir den Tab Kontext und erstellen einen neuen Kontext vom Typ Proxy:

Geben Sie die Parameter an: URI = /, Webserver = nextcloud_1 (Name aus dem vorherigen Schritt)

Starten Sie LSWS neu. Dies geschieht mit einem Klick über die Weboberfläche, Wunder wirken! (Die Stimme in mir ist die eines Erben der Maus-Spezialisten)


- Installieren Sie das Zertifikat, konfigurieren Sie https.
Erstellen Sie einen 'Listener' (Listeners > Hinzufügen), nennen Sie ihn 'https'. Geben Sie ihm den Port 443 an und markieren Sie, dass er sicher sein wird:
Im Tab SSL geben wir den Pfad zum Schlüssel und Zertifikat an:

Der 'Listener' ist erstellt, nun fügen wir in der Sektion Virtuelle Host-Zuordnungen unseren virtuellen Host hinzu:

Wenn LSWS nur zu einem Dienst proxen wird, können die Einstellungen abgeschlossen werden. Aber wir planen, es für die Übermittlung von Anfragen an verschiedene 'Instanzen' je nach Domainnamen zu verwenden. Und jeder Domain wird ihr eigenes Zertifikat haben. Daher müssen wir die Konfiguration des virtuellen Hosts erneut aufrufen und im Tab SSL erneut seinen Schlüssel und sein Zertifikat angeben. In Zukunft muss dies für jeden neuen virtuellen Host erfolgen.

Jetzt müssen wir die URL-Neuschreibung konfigurieren, damit HTTP-Anfragen an HTTPS gerichtet werden.

(Übrigens, wann wird das endlich enden? Es ist an der Zeit, dass Browser und andere Software standardmäßig auf HTTPS zugreifen und das Umleiten auf no-SSL manuell bei Bedarf erfolgt).
Aktivieren Sie Enable Rewrite und geben Sie die Rewrite-Regeln ein:
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$
https://%{SERVER_NAME}%{REQUEST_URI } [R=301,L]

Rewrite-Regeln können aus einem seltsamen Missverständnis heraus nicht auf vertraute Art und Weise mit einem eleganten Neustart angewendet werden. Daher starten wir LSWS nicht elegant, sondern grob und effizient neu:
sudo systemctl restart lsws.service
Damit der Server auch den Port 80 abhören kann, erstellen wir einen weiteren Listener. Nennen wir ihn http, geben wir den Port 80 an und die Tatsache, dass er nicht sicher sein wird:

Analog zur Konfiguration des HTTPS-Listeners binden wir unseren virtuellen Host daran.
Jetzt wird LSWS den Port 80 abhören und Anfragen von dort auf 443 umleiten, während die URL umgeschrieben wird.
Ich empfehle, das Logging-Level von LSWS zu senken, das standardmäßig auf Debug eingestellt ist. In diesem Modus vermehren sich die Logs blitzschnell! Für die meisten Fälle reicht das Level Warning aus. Gehen Sie zu Server Configuration > Log:

Damit ist die Einrichtung von OpenLiteSpeed als Reverse Proxy abgeschlossen. Wir starten LSWS erneut neu und gehen auf den Link und sehen:

Damit Nextcloud uns zulässt, muss die Domain cloud.connect.link zur Liste der vertrauenswürdigen Domains hinzugefügt werden. Gehen Sie zur Bearbeitung der config.php. Nextcloud habe ich automatisch bei der Installation von Ubuntu installiert und die Konfiguration befindet sich hier: /var/snap/nextcloud/current/nextcloud/config.
Wir fügen dem Schlüssel trusted_domains den Parameter 'cloud.connect.link' hinzu:
'trusted_domains' =>
array (
0 => '172.16.22.110',
1 => 'cloud.connect.link',
),

Außerdem muss in derselben Konfiguration die IP-Adresse unseres Proxies angegeben werden. Ich weise darauf hin, dass die Adresse diejenige sein muss, die dem Nextcloud-Server sichtbar ist, also die IP der lokalen Schnittstelle von LSWS. Ohne diesen Schritt funktioniert das Web-Interface von Nextcloud, aber die Anwendungen können sich nicht authentifizieren.
'trusted_proxies' =>
array (
0 => '172.16.22.100',
),
Gut, danach können wir auf die Authentifizierungsoberfläche zugreifen:

Aufgabe gelöst! Jetzt kann jeder Client sicher das "File Cloud" über seine persönliche URL nutzen, der Server mit den Dateien ist vom Internet getrennt, zukünftige Clients werden dasselbe erhalten und keine zusätzliche IP-Adresse wird betroffen sein.
Zusätzlich kann ein Reverse Proxy verwendet werden, um statische Inhalte bereitzustellen, aber im Fall von Nextcloud wird dies keine spürbare Geschwindigkeitssteigerung bringen. Das ist also optional und nach Wunsch.
Ich freue mich, diese Geschichte zu teilen und hoffe, dass sie jemandem nützlich sein wird. Wenn Sie elegantere und effektivere Lösungen für die gestellte Aufgabe kennen, wäre ich dankbar für Kommentare!
Quelle: habr.com
