Cum pot configura OpenLiteSpeed să inverseze proxy la Nextcloud situat în rețeaua mea internă?
În mod surprinzător, o căutare pe Habré pentru OpenLiteSpeed nu dă nimic! Mă grăbesc să corectez această nedreptate, pentru că LSWS este un server web demn. Îl iubesc pentru viteza și interfața de administrare web elegantă:

În ciuda faptului că OpenLiteSpeed este cel mai faimos ca „accelerator” WordPress, în articolul de astăzi voi arăta o aplicație destul de specifică a acestuia. Și anume, proxy inversă a cererilor. Ai spune că este mai comun să folosești nginx pentru asta? voi fi de acord. Dar ne-am îndrăgostit cu adevărat de LSWS!
Proxy-ul ok, dar unde? Un serviciu la fel de minunat este Nextcloud. Folosim Nextcloud pentru a crea „nori de partajare de fișiere” private. Pentru fiecare client alocăm o VM separată cu Nextcloud și nu dorim să le expunem „în exterior”. În schimb, solicităm proxy printr-un proxy invers comun. Această soluție vă permite să:
1) eliminați serverul pe care sunt stocate datele clientului de pe Internet și
2) salvați adrese IP.
Diagrama arată astfel:

Este clar că diagrama este simplificată, deoarece organizarea infrastructurii serviciilor web nu este subiectul articolului de astăzi.
De asemenea, în acest articol voi omite instalarea și configurația de bază a nextcloud, mai ales că există materiale pe această temă pe Habré. Dar cu siguranță vă voi arăta setările fără de care Nextcloud nu va funcționa în spatele unui proxy.
Dat:
Nextcloud este instalat pe gazda 1 și configurat să funcționeze prin http (fără SSL), are doar o interfață de rețea locală și o adresă IP „gri” 172.16.22.110.
Să configuram OpenLiteSpeed pe gazda 2. Are două interfețe, una externă (vizează Internetul) și una internă cu o adresă IP în rețea 172.16.22.0/24
Numele DNS cloud.connect.link duce la adresa IP a interfeței externe a gazdei 2
obiectiv:
Accesați de pe Internet folosind linkul „' (SSL) pe Nextcloud în rețeaua internă.
- Instalați OpenLiteSpeed pe Ubuntu 18.04.2.
Să adăugăm un depozit:
wget -O — |sudo bash
sudo apt-get update
instalați, rulați:
sudo apt-get install openlitespeed
sudo /usr/local/lsws/bin/lswsctrl start
- Să instalăm un firewall minim.
sudo ufw permit ssh
sudo ufw default permit outgoing
sudo ufw implicit deny incoming
sudo ufw permit http
sudo ufw permithttps
sudo ufw permit din gazda dvs. de management la orice port 7080
sudo ufw enable - Să configuram OpenLiteSpeed ca un proxy invers.
Să creăm directoare pentru virtualhost.cd /usr/local/lsws/
sudo mkdirc cloud.connect.link
cd cloud.connect.link/
sudo mkdir {conf,html,logs}
sudo chown lsadm:lsadm ./conf/
Să configuram virtualhost din interfața web LSWS.
Deschiderea managementului URL
Autentificare/parolă implicită: admin/123456

Adăugați o gazdă virtuală (Virtual Hosts > Add).
La adăugare, va apărea un mesaj de eroare care indică faptul că fișierul de configurare lipsește. Acest lucru este normal și poate fi rezolvat făcând clic pe Click pentru a crea.

În fila General, specificați Document Root (deși nu este necesar, configurația nu va decola fără ea). Numele de domeniu, dacă nu este specificat, va fi preluat din Virtual Host Name, pe care l-am numit numele domeniului nostru.

Acum este timpul să ne amintim că nu avem doar un server web, ci și un proxy invers. Următoarele setări vor spune LSWS ce să proxy și unde. În setările virtualhost, deschideți fila Aplicație externă și adăugați o nouă aplicație de tip server Web:

Indicăm numele și adresa. Puteți specifica un nume arbitrar, dar trebuie să îl amintiți; va fi util în următorii pași. Adresa este locul unde locuiește Nextcloud în rețeaua internă:

În aceleași setări virtualhost, deschideți fila Context și creați un nou context de tip Proxy:

Specificați parametrii: URI = /, server web = nextcloud_1 (nume de la pasul anterior)

Reporniți LSWS. Acest lucru se face cu un singur clic din interfața web, miracole! (purtătorul ereditar de șoarece din mine vorbește)


- Instalăm certificatul și configurăm https.
îl vom omite și suntem de acord că îl avem deja și se află împreună cu cheia în directorul /etc/letsencrypt/live/cloud.connect.link.
Să creăm un „ascultător” (Ascultători > Adăugați), numiți-l „https”. Să-l îndreptăm către portul 443 și să observăm că va fi Securizat:

În fila SSL, indicați calea către cheie și certificat:

„Ascultătorul” a fost creat, acum în secțiunea Virtual Host Mappings vom adăuga gazda noastră virtuală la el:

Dacă LSWS va trimite proxy doar unui serviciu, configurarea poate fi finalizată. Dar intenționăm să-l folosim pentru a transmite cereri către diferite „autorități”, în funcție de numele domeniului. Și toate domeniile vor avea propriile lor certificate. Prin urmare, trebuie să mergeți la configurația virtualhost și să specificați din nou cheia și certificatul acesteia în fila SSL. În viitor, acest lucru ar trebui făcut pentru fiecare gazdă virtuală nouă.

Tot ce rămâne este să configurați rescrierea adreselor URL, astfel încât cererile http să fie adresate către https.
(Apropo, când se va termina acest lucru? Este timpul ca browserele și alte programe software să treacă la https în mod implicit și să trimită manual la no-SSL, dacă este necesar).
Activați Activați rescrie și notați regulile de rescrie:
RewriteCond %{SERVER_PORT} 80
Rescrierea regulii ^(.*)$ } [R=301,L]

Din cauza unei neînțelegeri ciudate, nu puteți aplica regulile de rescriere folosind repornirea Graceful obișnuită. Prin urmare, să repornim LSWS nu cu grație, ci aproximativ și eficient:
sudo systemctl restart lsws.service
Pentru ca serverul să asculte portul 80, vom crea un alt ascultător. Să-i spunem http, să indicăm cel de-al 80-lea port și faptul că nu va fi sigur:

Prin analogie cu configurarea unui ascultător https, să mapam gazda noastră virtuală la acesta.
Acum LSWS va asculta portul 80 și va trimite cereri de la acesta la 443, rescriind adresa URL.
În cele din urmă, recomand să scădeți nivelul de înregistrare LSWS, care este setat implicit la Debug. În acest mod, buștenii se înmulțesc cu viteza fulgerului! În majoritatea cazurilor, nivelul de avertizare este suficient. Accesați Configurarea serverului > Jurnal:

Acest lucru completează configurarea OpenLiteSpeed ca proxy invers. Încă o dată repornim LSWS, urmați linkul si vedem:

Pentru ca Nextcloud să ne permită accesul, trebuie să adăugăm domeniul cloud.connect.link la lista de încredere. Să edităm config.php. Am instalat Nextcloud automat în timpul instalării. Ubuntu iar configurația se află aici: /var/snap/nextcloud/current/nextcloud/config.
Adăugați parametrul „cloud.connect.link” la cheia trusted_domains:
'trusted_domains' =>
matrice (
0 => '172.16.22.110',
1 => „cloud.connect.link”,
),

Apoi, în aceeași configurație, trebuie să specificați adresa IP a proxy-ului nostru. Vă rugăm să rețineți că adresa trebuie specificată ca una care este vizibilă pentru serverul Nextcloud, de exemplu. IP interfață locală LSWS. Fără acest pas, interfața web Nextcloud funcționează, dar aplicațiile nu sunt autorizate.
'trusted_proxies' =>
matrice (
0 => '172.16.22.100',
),
Grozav, după aceasta putem ajunge la interfața de autorizare:

Problema rezolvata! Acum fiecare client poate folosi în siguranță „norul de fișiere” folosind adresa URL personală, serverul cu fișierele este separat de Internet, viitorii clienți vor primi totul la fel și nici o adresă IP suplimentară nu va fi afectată.
În plus, puteți utiliza un proxy invers pentru a furniza conținut static, dar în cazul Nextcloud, acest lucru nu va oferi o creștere vizibilă a vitezei. Deci, acesta este opțional și opțional.
Ma bucur sa impartasesc aceasta poveste, sper sa fie de folos cuiva. Dacă știți metode mai elegante și mai eficiente de rezolvare a acestei probleme, v-aș fi recunoscător pentru comentariile voastre!
Sursa: www.habr.com
