Nextcloud unutar i izvan OpenLiteSpeeda: postavljanje obrnutog proxyja
Kako da podesim OpenLiteSpeed da preokrene proxy na Nextcloud na internoj mreži?
Iznenađujuće, pretraga na Habré-u za OpenLiteSpeed ne daje ništa! Žurim da ispravim ovu nepravdu, jer je LSWS pristojan web server. Volim ga zbog njegove brzine i otmjenog interfejsa za web administraciju:
Iako je OpenLiteSpeed najpoznatiji kao WordPress "akcelerator", u današnjem članku ću pokazati njegovu prilično specifičnu upotrebu. Naime, obrnuto proxyiranje zahtjeva (reverse proxy). Kažete da je češće koristiti nginx za ovo? složit ću se. Ali toliko boli da smo se zaljubili u LSWS!
Proksiranje je ok, ali gdje? U ništa manje divnoj usluzi - Nextcloud. Koristimo Nextcloud za kreiranje privatnih oblaka za dijeljenje datoteka. Za svakog klijenta dodjeljujemo zasebnu VM s Nextcloudom i ne želimo da ih izlažemo „spolja“. Umjesto toga, mi proxy zahtjeve putem zajedničkog obrnutog proxyja. Ovo rješenje omogućava:
1) uklonite server na kojem se pohranjuju podaci o klijentu sa Interneta i
2) sačuvati ip-adrese.
Dijagram izgleda ovako:
Jasno je da je shema pojednostavljena, jer organizacija infrastrukture web servisa nije tema današnjeg članka.
Takođe u ovom članku ću izostaviti instalaciju i osnovnu konfiguraciju nextclouda, pogotovo jer Habré ima materijale na ovu temu. Ali svakako ću pokazati postavke bez kojih Nextcloud neće raditi iza proxyja.
S obzirom:
Nextcloud je instaliran na hostu 1 i konfiguriran za rad preko http (bez SSL-a), ima samo sučelje lokalne mreže i "sivu" IP adresu 172.16.22.110.
Konfigurišite OpenLiteSpeed na hostu 2. Ima dva interfejsa, eksterno (izgleda na Internet) i interno sa IP adresom na mreži 172.16.22.0/24
IP adresa eksternog interfejsa hosta 2 je DNS ime cloud.connect.link
Zadatak:
Preuzmite sa interneta putem linka 'https://cloud.connect.link' (SSL) na Nextcloud na internoj mreži.
sudo ufw dozvoli ssh
sudo ufw default dozvoljava odlazni
sudo ufw default deny dolazni
sudo ufw omogućiti http
sudo ufw dozvoli https
sudo ufw dozvoli iz vaš upravljački host na bilo koji port 7080
sudo ufw omogućiti
Postavite OpenLiteSpeed kao obrnuti proxy.
Kreirajmo direktorije pod virtualhostom.
cd /usr/local/lsws/
sudo mkdirc cloud.connect.link
cd cloud.connect.link/
sudo mkdir {conf,html,logs}
sudo chown lsadm:lsadm ./conf/
Konfigurirajmo virtuelni host iz LSWS web sučelja.
Otvorite upravljanje urlovima http://cloud.connect.link:7080
Zadana prijava/lozinka: admin/123456
Dodajte virtuelni host (Virtualni domaćini > Dodaj).
Prilikom dodavanja pojavit će se poruka o grešci - nedostaje konfiguracijski fajl. Ovo je normalno, rješava se klikom na Click to create.
Na kartici Općenito navedite korijen dokumenta (iako nije potreban, konfiguracija se neće pokrenuti bez njega). Ime domene, ako nije navedeno, biće preuzeto iz imena virtuelnog hosta, koje smo nazvali našim imenom domene.
Sada je vrijeme da se prisjetimo da nemamo samo web server, već i obrnuti proxy. Sljedeće postavke će reći LSWS-u šta da proxy i gdje. U postavkama virtuelnog hosta otvorite karticu Eksterna aplikacija i dodajte novu aplikaciju tipa web servera:
Navedite ime i adresu. Možete odrediti proizvoljno ime, ali morate ga zapamtiti, dobro će vam doći u sljedećim koracima. Adresa je ona na kojoj Nextcloud živi u internoj mreži:
U istim postavkama virtuelnog hosta, otvorite karticu Kontekst i kreirajte novi kontekst tipa Proxy:
Odredite parametre: URI = /, Web server = nextcloud_1 (ime iz prethodnog koraka)
Ponovo pokrenite LSWS. Ovo se radi jednim klikom sa web interfejsa, čuda! (u meni govori nasljedni miš-nosac)
Stavljamo sertifikat, konfigurišemo https. Procedura za dobijanje sertifikata izostavićemo ga, slažemo se da ga već imamo i ležimo sa ključem u /etc/letsencrypt/live/cloud.connect.link direktorijumu.
Kreirajmo "slušatelja" (Listeners > Add), nazovimo ga "https". Usmjerite ga na port 443 i imajte na umu da će biti siguran:
Na kartici SSL navedite putanju do ključa i certifikata:
“Slušalac” je kreiran, sada ćemo mu u odjeljku Mapiranja virtualnog hosta dodati naš virtualni host:
Ako LSWS koristi samo jednu uslugu, konfiguracija se može dovršiti. Ali planiramo ga koristiti za slanje zahtjeva na različite "instance" ovisno o nazivu domene. I sve domene će imati svoje certifikate. Stoga morate otići na konfiguraciju virtualnog hosta i ponovo navesti njegov ključ i certifikat na kartici SSL. U budućnosti bi to trebalo da se radi za svaki novi virtuelni host.
Ostaje da se konfiguriše prepisivanje url-a tako da se http zahtjevi adresiraju na https. (Usput, kada će se ovo završiti? Vrijeme je da pretraživači i drugi softver po defaultu odu na https, a ako je potrebno, ručno proslijede na no-SSL).
Uključite Enable Rewrite i napišite Rewrite Rules:
Zbog čudnog nesporazuma, nemoguće je primijeniti Rewrite pravila uz uobičajeno Graceful restart. Stoga ćemo ponovo pokrenuti LSWS ne graciozno, već grubo i efikasno:
sudo systemctl restart lsws.service
Da bi server slušao port 80, napravimo drugi slušalac. Nazovimo ga http, navedite 80. port i da neće biti bezbedan:
Po analogiji sa https postavkom slušaoca, priključimo mu naš virtuelni host.
Sada će LSWS slušati na portu 80 i slati zahtjeve na 443 sa njega, prepisujući url.
U zaključku, preporučujem snižavanje nivoa LSWS evidentiranja, koji je po defaultu postavljen na Debug. U ovom načinu rada, trupci se množe brzinom munje! U većini slučajeva dovoljan je nivo upozorenja. Idite na Konfiguracija servera > Dnevnik:
Ovo dovršava konfiguraciju OpenLiteSpeeda kao obrnutog proxyja. Još jednom, ponovo pokrenite LSWS, pratite vezu https://cloud.connect.link i vidimo:
Da bi nas Nextcloud pustio unutra, moramo dodati domen cloud.connect.link na pouzdanu listu. Idemo uređivati config.php. Automatski sam instalirao Nextcloud prilikom instaliranja Ubuntua i konfiguracija se nalazi ovdje: /var/snap/nextcloud/current/nextcloud/config.
Dodajte parametar 'cloud.connect.link' ključu trusted_domains:
Nadalje, u istoj konfiguraciji morate navesti IP adresu našeg proxyja. Skrećem vam pažnju da adresa mora biti navedena ona koja je vidljiva Nextcloud serveru, tj. IP lokalnog LSWS sučelja. Bez ovog koraka, Nextcloud web sučelje radi, ali aplikacije nisu ovlaštene.
'trusted_proxies' =>
niz (
0 => '172.16.22.100',
),
Odlično, nakon toga možemo ući u autorizacijski interfejs:
Problem riješen! Sada svaki klijent može bezbedno da koristi „oblak fajlova“ na svom ličnom URL-u, server sa fajlovima je odvojen od interneta, budući klijenti će primati sve isto i to neće uticati ni na jednu dodatnu IP adresu.
Dodatno, možete koristiti obrnuti proxy za isporuku statičkog sadržaja, ali u slučaju Nextclouda, to neće dati primjetno povećanje brzine. Dakle, to je opciono i opciono.
Drago mi je da podijelim ovu priču, nadam se da će nekome biti od koristi. Ako znate elegantnije i efikasnije metode za rješavanje problema, bit ću vam zahvalan na komentarima!