Ako nastaviť OpenLiteSpeed na reverzné proxy pre Nextcloud, ktorý sa nachádza v internej sieti?
Prekvapivo, ale vyhľadávanie na Habr-e s dotazom OpenLiteSpeed nič nenájde! Rýchlo sa chystám napraviť túto nespravodlivosť, pretože LSWS je zaslúžený webový server. Milujem ho za rýchlosť a moderné administračné webové rozhranie:

Napriek tomu, že OpenLiteSpeed je najznámejší ako 'zrýchľovač' WordPressu, v dnešnom článku ukážem dosť špecifické použití. A to je reverzné proxy procesov (reverse proxy). Poviete, že na to je obvykle pohodlnejšie použiť nginx? Súhlasím. Ale LSWS sa nám naozaj zapáčil!
Proxy je OK, ale kam? Do nemenej skvelého služby – Nextcloud. Používame Nextcloud na vytvorenie súkromných „cloudov na zdieľanie súborov“. Pre každého klienta vytvárame samostatnú VM s Nextcloud a nechceme ich vystaviť „navonok“. Namiesto toho presmerovávame požiadavky cez spoločné reverzné proxy. Toto riešenie umožňuje:
1) odstrániť server, na ktorom sú uložené dáta klienta, z internetu a
2) šetriť IP adresy.
Schéma vyzerá takto:

Je jasné, že schéma je zjednodušená, keďže organizácia infraštruktúry webových služieb nie je témou dnešného článku.
Tiež v tomto článku vynechám inštaláciu a základné nastavenie Nextcloudu, o čom sú už na Habr-e ďalšie materiály. Ale určite ukážem nastavenia, bez ktorých Nextcloud nebude fungovať za proxy.
Dané:
Nextcloud je nainštalovaný na hoste 1 a nastavený na prácu cez http (bez SSL), má iba lokálne sieťové rozhranie a „šedú“ IP adresu 172.16.22.110.
Nastavíme OpenLiteSpeed na hoste 2. Má dve rozhrania, vonkajšie (smeruje do internetu) a vnútorné s IP adresou v sieti 172.16.22.0/24
Na IP adresu vonkajšieho rozhrania hosta 2 vedie DNS meno cloud.connect.link
Úloha:
Dostať sa z internetu cez odkaz ‘‘ (SSL) na Nextcloud vo vnútornej sieti.
- Inštalujeme OpenLiteSpeed na Ubuntu 18.04.2.
Pridáme repozitár:
wget -O — |sudo bash
sudo apt-get update
inštalujeme, spúšťame:
sudo apt-get install openlitespeed
sudo /usr/local/lsws/bin/lswsctrl start
- Minimalne 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 váš hostiteľský server to any port 7080
sudo ufw enable - Nastavíme OpenLiteSpeed ako reverzné proxy.
Vytvoríme adresáre pre virtuálny 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álny hostiteľ z webového rozhrania LSWS.
Otvárame správu URL
Predvolené prihlasovacie meno/heslo: admin/123456

Pridávame virtuálny hostiteľ (Virtual Hosts > Add).
Pri pridávaní sa objaví správa o chybe – chýbajúci konfiguračný súbor. To je normálne, vyrieši sa kliknutím na Kliknite na vytvorenie.

Na záložke General uvedieme Document Root (aj keď nebude potrebný, bez neho konfigurácia nefunguje). Názov domény, ak ho neuviedol, bude prevzatý z názvu virtuálneho hostiteľa, ktorý sme nazvali menom našej domény.

Teraz si musíme pripomenúť, že máme nielen webový server, ale aj reverzný proxy. Nasledujúce nastavenia uvedú LSWS, čo proxy a kam. V nastaveniach virtuálneho hostiteľa otvoríme záložku External App a pridáme novú aplikáciu typu Web server:

Uvedieme názov a adresu. Názov môžeme zadať ľubovoľne, ale musíme si ho zapamätať, neskôr sa zíde. Adresa – tá, kde sa nachádza Nextcloud v internej sieti:

V rovnakých nastaveniach virtuálneho hostiteľa otvoríme záložku Context a vytvoríme nový kontext typu Proxy:

Uvedieme parametre: URI = /, Web server = nextcloud_1 (názov z predchádzajúceho kroku)

Reštartujeme LSWS. To sa robí jedným klikom z webového rozhrania, zázraky! (vo mne hovorí dedič myšerov)


- Nastavíme certifikát, nastavíme https.
vynecháme, dohodneme sa, že už ho máme a leží spolu s kľúčom v adresári /etc/letsencrypt/live/cloud.connect.link.
Vytvoríme "poslucháča" (Listeners > Add), nazveme ho "https". Uvedieme mu port 443 a označíme, že bude Secure:

Na záložke SSL uvedieme cestu k kľúču a certifikátu:

"Poslucháč" je vytvorený, teraz v sekcii Virtual Host Mappings pridáme k nemu náš virtuálny hostiteľ:

Ak bude LSWS proxy iba na jeden servis, nastavenie sa môže skončiť. Ale plánujeme ho používať na prenášanie požiadaviek do rôznych "inštancií" v závislosti od názvu domény. A všetky domény budú mať svoje certifikáty. Preto musíme ísť do konfigurácie virtuálneho hostiteľa a znovu uviesť na záložke SSL jeho kľúč a certifikát. V budúcnosti to treba robiť pre každý nový virtuálny hostiteľ.

Zostáva nastaviť prepis url, aby http požiadavky smerovali na https.
(Mimochodom, kedy už toto skončí? Už je čas, aby prehliadače a iný softvér predvolene chodili na https a presmerovanie na no-SSL robili manuálne, ak je to potrebné).
Povoľujeme Enable Rewrite a zapisujeme Rewrite Rules:
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ } [R=301,L]

Aplikovať pravidlá Rewrite nie je možné pomocou obvyklého Graceful restartu kvôli podivnému nedorozumeniu. Preto reštartujeme LSWS nie elegantne, ale tvrdo a efektívne:
sudo systemctl restart lsws.service
Aby server počúval aj na porte 80, vytvoríme ďalší Listener. Nazveme ho http, uvedieme port 80 a to, že bude ne-Secure:

Podobne ako pri nastavovaní https listenera, priradíme mu náš virtuálny hosť.
Teraz LSWS bude počúvať na porte 80 a presmerovávať z neho požiadavky na 443, prepíšu url.
Na záver odporúčam znížiť úroveň logovania LSWS, ktorá je predvolene nastavená na Debug. V tomto režime sa logy množia bleskovo! Pre väčšinu prípadov stačí úroveň Warning. Prejdeme na Server Configuration > Log:

Týmto je nastavenie OpenLiteSpeed ako reverzného proxy dokončené. Opäť reštartujeme LSWS, ideme na odkaz a vidíme:

Aby nás Nextcloud pustil, je potrebné pridať doménu cloud.connect.link do zoznamu dôveryhodných. Ideme upraviť config.php. Nextcloud som inštaloval automaticky pri inštalácii Ubuntu a konfigurácia sa nachádza tu: /var/snap/nextcloud/current/nextcloud/config.
Kľúču trusted_domains pridáme parameter 'cloud.connect.link':
'trusted_domains' =>
array (
0 => '172.16.22.110',
1 => 'cloud.connect.link',
),

Potom, v tej istej konfigurácii musíme uviesť IP adresu nášho proxy. Upozorňujem, že adresu je potrebné uviesť tú, ktorá je viditeľná serveru Nextcloud, t.j. IP lokálneho rozhrania LSWS. Bez tohto kroku webové rozhranie Nextcloud funguje, ale aplikácie sa neautorizujú.
'trusted_proxies' =>
array (
0 => '172.16.22.100',
),
Skvele, po tom sa môžeme dostať do rozhrania autorizácie:

Úloha je vyriešená! Teraz môže každý klient bezpečne využívať "súborové cloud" prostredníctvom svojho osobného url, server so súbormi je oddelený od internetu, budúci klienti dostanú to isté a žiadna ďalšia IP adresa nebude zranená.
Ďalšie je možné použiť reverzný proxy pre dodanie statického obsahu, ale v prípade Nextcloud to neprinesie pociteľný nárast rýchlosti. Takže je to voliteľné a podľa želania.
Rád sa podeľím o tento príbeh, dúfam, že niekomu bude užitočný. Ak poznáte elegantnejšie a efektívnejšie metódy na riešenie daného problému – budem vďačný za komentáre!
Zdroj: habr.com
