Jak nastavit OpenLiteSpeed pro reverzní proxy na Nextcloudu, který se nachází v interní síti?
Je překvapivé, že vyhledávání na Habru podle dotazu OpenLiteSpeed nic nenajde! Spěchám napravit tuto nespravedlnost, protože LSWS je zasloužený webový server. Miluji ho pro jeho rychlost a moderní webové administrátorské rozhraní:

I když je OpenLiteSpeed nejznámější jako „zrychlovač“ WordPressu, v dnešním článku ukážu jeho poměrně specifické využití. A to konkrétně reverzní proxy požadavků. Řeknete, že pro to je obvykle pohodlnější používat nginx? Souhlasím. Ale LSWS jsme si opravdu oblíbili!
Proxy je v pořádku, ale kam? Na neméně skvělou službu – Nextcloud. Používáme Nextcloud pro vytváření soukromých „cloudů pro sdílení souborů“. Každému klientovi vyčleňujeme samostatnou VM s Nextcloudem a nechceme je vystavovat „ven“. Místo toho proxujeme požadavky přes společnou reverzní proxy. Toto řešení umožňuje:
1) odstranit server, na kterém jsou data klienta, z internetu a
2) šetřit IP adresami.
Schéma vypadá takto:

Je jasné, že schéma je zjednodušené, protože organizace infrastruktury webových služeb není tématem dnešního článku.
Také v tomto článku opomenu instalaci a základní nastavení Nextcloudu, zejména protože na Habru jsou k tomuto tématu již materiály. Ale ukážu vám nastavení, bez kterých Nextcloud nebude fungovat za proxy.
Dané:
Nextcloud je nainstalován na hostiteli 1 a nastaven pro práci přes http (bez SSL), má pouze lokální síťové rozhraní a „šedou“ IP adresu 172.16.22.110.
Nastavíme OpenLiteSpeed na hostiteli 2. Ten má dvě rozhraní, externí (směřuje do internetu) a interní s IP adresou v síti 172.16.22.0/24.
Na IP adresu externího rozhraní hostitele 2 vede DNS jméno cloud.connect.link.
Úkol:
Dostávat se z internetu přes odkaz ‘‘ (SSL) na Nextcloud v interní síti.
- Instalujeme OpenLiteSpeed na Ubuntu 18.04.2.
Přidáme repozitář:
wget -O — |sudo bash
sudo apt-get update
instalujeme, spouštíme:
sudo apt-get install openlitespeed
sudo /usr/local/lsws/bin/lswsctrl start
- Minimálně nastavíme firewall.
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 vaše řídící rozhraní do jakéhokoli portu 7080
sudo ufw enable - Nastavíme OpenLiteSpeed jako reverzní proxy.
Vytvoříme adresáře pro virtuální host.cd /usr/local/lsws/
sudo mkdir cloud.connect.link
cd cloud.connect.link/
sudo mkdir {conf,html,logs}
sudo chown lsadm:lsadm ./conf/
Nastavíme virtuální host z webového rozhraní LSWS.
Otevřeme správu URL
Výchozí login/heslo: admin/123456

Přidání virtuálního hostitele (Virtual Hosts > Add).
Při přidání se objeví chybová zpráva – chybějící konfigurační soubor. To je normální, vyřeší se to kliknutím na Klikněte pro vytvoření.

Na kartě Obecné uvedeme Document Root (i když nebude potřeba, bez něj konfigurace nefunguje). Název domény, pokud ho nezadáme, bude převzat z názvu virtuálního hostitele, který jsme pojmenovali podle našeho domény.

Teď si musíme připomenout, že máme nejen webový server, ale i reverzní proxy. Následující nastavení určí LSWS, co má proxy a kam. V nastavení virtuálního hostitele otevřeme kartu External App a přidáme novou aplikaci typu Web server:

Uvedeme název a adresu. Název může být libovolný, ale musíme si ho zapamatovat, bude se hodit v dalších krocích. Adresa je ta, kde sídlí Nextcloud v interní síti:

Ve stejném nastavení virtuálního hostitele otevřeme kartu Context a vytvoříme nový kontext typu Proxy:

Uvedeme parametry: URI = /, Web server = nextcloud_1 (název z předchozího kroku)

Restartujeme LSWS. To se provádí jedním kliknutím z webového rozhraní, zázraky! (ve mně mluví potomek myšového vozu)


- Nastavujeme certifikát, konfigurujeme https.
vynecháme, domluvíme se, že už ho máme a leží spolu s klíčem v adresáři /etc/letsencrypt/live/cloud.connect.link.
Vytvoříme „posluchače“ (Listeners > Add), nazveme ho „https“. Uvedeme mu port 443 a označíme, že bude Secure:

Na kartě SSL uvedeme cestu k klíči a certifikátu:

„Posluchač“ je vytvořen, nyní v sekci Virtual Host Mappings k němu přidáme náš virtuální hostitel:

Pokud bude LSWS proxy jen do jednoho servisu, nastavení může být dokončeno. Ale plánujeme ho používat k předávání požadavků do různých „instancí“ podle názvu domény. A všechny domény budou mít své certifikáty. Proto musíme jít do konfiguračního souboru virtuálního hostitele a znovu uvést na kartě SSL jeho klíč a certifikát. V budoucnu to bude třeba udělat pro každého nového virtuálního hostitele.

Zbývá nastavit přepisování URL, aby http požadavky směřovaly na https.
(Mimochodem, kdy už to skončí? Je na čase, aby prohlížeče a další software ve výchozím nastavení chodily na https a přesměrování na bezSSL se dělalo ručně, pokud je to nutné).
Povolíme Enable Rewrite a zapíšeme Rewrite Rules:
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ } [R=301,L]

Je možné použít pravidla Rewrite pro Graceful restart, ale kvůli podivnému nedorozumění to není možné. Takže restartujeme LSWS nešetrně, ale efektivně:
sudo systemctl restart lsws.service
Aby server naslouchal na portu 80, vytvoříme další Listener. Nazveme ho http, uvedeme port 80 a dáme vědět, že nebude bezpečný:

Podobně jako při nastavení https listenera, přiřadíme k němu náš virtuální host.
Nyní bude LSWS naslouchat na portu 80 a směrovat požadavky na 443, přepisujíc URL.
Nakonec doporučuji snížit úroveň logování LSWS, která je ve výchozím nastavení nastavena na Debug. V tomto režimu se logy zhustí bleskově! Pro většinu případů stačí úroveň Warning. Přejdeme do Server Configuration > Log:

Tímto je nastavení OpenLiteSpeed jako reverzní proxy dokončeno. Znovu restartujeme LSWS a přejdeme na odkaz a vidíme:

Aby nás Nextcloud pustil, je třeba přidat doménu cloud.connect.link do seznamu důvěryhodných. Přecházíme k úpravě config.php. Nextcloud jsem nainstaloval automaticky při instalaci Ubuntu a konfigurace se nachází zde: /var/snap/nextcloud/current/nextcloud/config.
Ke klíči trusted_domains přidáváme parametr ‘cloud.connect.link’:
‘trusted_domains’ =>
array (
0 => ‘172.16.22.110’,
1 => ‘cloud.connect.link’,
),

Dále v téže konfiguraci musíme uvést IP adresu našeho proxy. Zdůrazňuji, že adresu je třeba zadat tu, která je viditelná serveru Nextcloud, tzn. IP lokálního rozhraní LSWS. Bez tohoto kroku funguje webové rozhraní Nextcloud, ale aplikace se neautorizují.
‘trusted_proxies’ =>
array (
0 => ‘172.16.22.100’,
),
Skvělé, nyní se můžeme dostat do autentizačního rozhraní:

Úkol byl vyřešen! Nyní každý klient může bezpečně používat „soubory v cloudu“ na své osobní URL, server se soubory je oddělen od internetu a budoucí klienti dostanou přesně to samé, aniž by jakákoli další IP adresa utrpěla.
Navíc lze použít reverzní proxy pro dodání statického obsahu, ale v případě Nextcloudu to nepřinese znatelný nárůst rychlosti. Takže je to volitelné a podle přání.
Rád se podělím o tento příběh, doufám, že někomu bude užitečný. Pokud znáte elegantnější a efektivnější metody řešení stanoveného úkolu – budu vděčný za komentáře!
Zdroj: habr.com
